zoukankan      html  css  js  c++  java
  • 【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,就要求其补码作为校验和。通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性。

  • 相关阅读:
    代码分层之模拟servlet调用dao
    Request对象和Response对象
    jquery-动画
    jquery-easyui
    phpcms
    Ajax做分页
    phpcms安装
    cms替换主页的步骤
    php 复习
    登录验证——————生成随机数
  • 原文地址:https://www.cnblogs.com/Sukie-s-home/p/7889598.html
Copyright © 2011-2022 走看看