package com.ruoyi.common.utils;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;

public class AntiFakeCode {

    // 生成16位防伪码（大写字母和数字）
    public static String generateAntiFakeCode(String input) {
        try {
            // 使用SHA-256生成哈希值
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8));

            // 转换为大写字母和数字
            StringBuilder code = new StringBuilder();
            for (byte b : hash) {
                int value = b & 0xFF; // 取低8位
                if (value < 10) {
                    code.append((char) ('0' + value)); // 数字
                } else {
                    code.append((char) ('A' + (value % 26))); // 大写字母
                }
                // 防伪码长度达到16位就停止
                if (code.length() >= 16) break;
            }
            return code.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("SHA-256 algorithm not found!", e);
        }
    }

    // 模拟验证防伪码
    public static boolean verifyAntiFakeCode(String input, String antiFakeCode) {
        String generatedCode = generateAntiFakeCode(input);
        return generatedCode.equals(antiFakeCode);
    }

    public static void main(String[] args) {
        // 需要生成防伪码的输入信息
        String input = "HBQ202501170001|20250107|20250117174300";

        // 生成防伪码
        String antiFakeCode = generateAntiFakeCode(input);
        System.out.println("生成的防伪码: " + antiFakeCode);

        // 验证防伪码
        boolean isValid = verifyAntiFakeCode(input, antiFakeCode);
        System.out.println("验证结果: " + isValid);

    }
}
