JAVA CRC工具类

本文详细介绍了Java中CRC(Cyclic Redundancy Check,循环冗余校验)工具类的使用,包括CRC校验的基本原理、如何在Java中实现CRC计算以及相关示例代码,帮助读者理解并应用到实际项目中进行数据校验。
摘要由CSDN通过智能技术生成
CRCUtils
public class CRCUtils {

    /**
     * CRC校验
     *       ModBus 通信协议的 CRC ( 冗余循环校验码含2个字节, 即 16 位二进制数。
     *       CRC 码由发送设备计算, 放置于所发送信息帧的尾部。
     *       接收信息设备再重新计算所接收信息 (除 CRC 之外的部分)的 CRC,
     *       比较计算得到的 CRC 是否与接收到CRC相符, 如果两者不相符, 则认为数据出错。
     *
     *       1) 预置 1 个 16 位的寄存器为十六进制FFFF(即全为 1) , 称此寄存器为 CRC寄存器。
     *       2) 把第一个 8 位二进制数据 (通信信息帧的第一个字节) 与 16 位的 CRC寄存器的低 8 位相异或, 把结果放于 CRC寄存器。
     *       3) 把 CRC 寄存器的内容右移一位( 朝低位)用 0 填补最高位, 并检查右移后的移出位。
     *       4) 如果移出位为 0, 重复第 3 步 ( 再次右移一位); 如果移出位为 1, CRC 寄存器与多项式A001 ( 1010 0000 0000 0001) 进行异或。
     *       5) 重复步骤 3 和步骤 4, 直到右移 8 次,这样整个8位数据全部进行了处理。
     *       6) 重复步骤 2 到步骤 5, 进行通信信息帧下一个字节的处理。
     *       7) 将该通信信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换。
     *       8) 最后得到的 CRC寄存器内容即为 CRC码。
     * @param bytes 输入的字节数组
     * @return
     */
    public static String getCRC(byte[] bytes) {

        int CRC = 0x0000ffff;
        int POLYNOMIAL 
CRC16(Cyclic Redundancy Check)是一种错误检测码,CCITT则是国际电信联盟(International Telegraph and Telephone Consultative Committee,简称CCITT)制定的一个CRC算法的标准。 在Java编程语言中,可以通过以下方式实现CRC16 CCITT算法: 1. 首先,需要创建一个CRC16工具类,该类主要用于计算CRC码。可以定义一个静态方法,接收一个字节数组作为输入参数,返回计算出的CRC16校验码。 2. 在CRC16工具类中,可以定义一个CRC16表(也称为查表法),用于加快计算的速度。这个表是一个256个元素的数组,元素的值是0-65535的无符号16位数。 3. CRC16 CCITT算法中,首先需要将CRC校验码的初始值设为0xFFFF(十六进制),开始对输入数据进行校验。 4. 对于输入的每一个字节数据,从高位到低位进行计算。首先从CRC16表中查找该字节数据对应的16位CRC校验码,然后将这个校验码与当前的CRC校验值进行异或运算。 5. 接下来,将CRC校验值右移8位,并与0xFF(十六进制)进行与运算,得到一个低8位的结果。 6. 将这个结果与CRC16表中对应的16位CRC校验码进行异或运算,得到新的CRC校验值。 7. 重复以上步骤,直到所有的字节数据都计算完毕。 8. 最后,对CRC校验值进行取反运算,并作为最终的CRC16 CCITT校验码返回。 通过以上步骤,就可以实现Java中的CRC16 CCITT算法。可以在需要使用CRC16 CCITT校验码的地方调用这个工具类的方法,传入需要校验的数据,即可得到CRC16校验码。这个校验码可以用于数据的完整性检查和传输的错误控制等领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值