【Java-算法】 計算十六進制校驗位


如何計算16進制校驗位?
校驗的實質是16進制取和模256的值。

eg. 十六進制串:0A0B0C0D0E0F 的校驗位是: 4B (HEX)
計算過程:

  1. 十六進制轉十進制 0A (HEX)= 10(DEC),以此類推
  2. 計算和 10+11+12+13+14+15=75 (DEC) 
  3. 取余 75%256=75
  4. 十進制轉十六進制 75(DEC)= 4B(HEX)

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

 

為什么要計算校驗位?校驗位的原理是什么?

檢驗和(checksum),在數據處理和數據通信領域中,用於校驗目的地一組數據項的和。它通常是以十六進制為數制表示的形式。如果校驗和的數值超過十六進制的FF,也就是255,就要求其補碼作為校驗和。通常用來在通信中,尤其是遠距離通信中保證數據的完整性和准確性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM