package com.muyu.utils;

/**
 * 校验位计算
 */
public class CalculateCheckDigit {

    /**
     * 不去空格
     * @param sHex
     * @return
     */
    public static String makeCheck(String sHex){
        return makeCheckSum(sHex.replace(" ", ""));
    }

    /**
     * 计算校验位 ，返回十六进制校验位
     * */
    private static String makeCheckSum(String data) {
        int dSum = 0;
        int length = data.length();
        int index = 0;
        // 遍历十六进制，并计算总和
        while (index < length) {
            // 截取2位字符
            String s = data.substring(index, index + 2);
            // 十六进制转成十进制 , 并计算十进制的总和
            dSum += Integer.parseInt(s, 16);
            index = index + 2;
        }

        // 用256取余，十六进制最大是FF，FF的十进制是255
        int mod = dSum % 256;
        // 余数转成十六进制
        String checkSumHex = Integer.toHexString(mod);
        length = checkSumHex.length();
        if (length < 2) {
            // 校验位不足两位的，在前面补0
            checkSumHex = "0" + checkSumHex;
        }
        return checkSumHex;
    }
}
