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; } }