如何計算16進制校驗位?
校驗的實質是16進製取和模256的值。git
eg. 十六進制串:0A0B0C0D0E0F 的校驗位是: 4B (HEX)
計算過程:spa
Java Code:code
public class CalculateCheckDigit { /** 輸入十六進制,輸出兩位校驗位 */ public static void main(String args[]) { String sHex = "01 F1 00 04 03 06 01 B0";// 輸入十六進制 sHex = sHex.replace(" ", "");// 去掉中間空格 String result = makeCheckSum(sHex);// 計算並獲取校驗位 System.out.println(result);// 輸入兩位校驗位 結果是B0 } /** 計算校驗位 ,返回十六進制校驗位 */ private static String makeCheckSum(String data) { int dSum = 0; int length = data.length(); int index = 0; // 遍歷十六進制,並計算總和 while (index < length) { String s = data.substring(index, index + 2); // 截取2位字符 dSum += Integer.parseInt(s, 16); // 十六進制轉成十進制 , 並計算十進制的總和 index = index + 2; } int mod = dSum % 256; // 用256取餘,十六進制最大是FF,FF的十進制是255 String checkSumHex = Integer.toHexString(mod); // 餘數轉成十六進制 length = checkSumHex.length(); if (length < 2) { checkSumHex = "0" + checkSumHex; // 校驗位不足兩位的,在前面補0 } return checkSumHex; } }
爲何要計算校驗位?校驗位的原理是什麼?blog
檢驗和(checksum),在數據處理和數據通訊領域中,用於校驗目的地一組數據項的和。它一般是以十六進制爲數製表示的形式。若是校驗和的數值超過十六進制的FF,也就是255,就要求其補碼做爲校驗和。一般用來在通訊中,尤爲是遠距離通訊中保證數據的完整性和準確性。string