java实现CRC校验码

     这两天项目中要使用到CRC校验功能,网上大量的例子是针对c、delphi的例子,前期没有做过,理论上也欠缺很多知识,在这里对java如何实现我们想要的crc校验功能做一下自己的总结,以下内容有本分转自网上,希望对有需要的朋友作能够参考一下。

一、什么是CRC校验:

     

      CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

   二、CRC的原理若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得

V(x)=A(x)g(x)=xRm(x)+r(x);

其中:    m(x)为K次信息多项式, r(x)为R-1次校验多项式,

         g(x)称为生成多项式:

g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR

发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。                                                     

                                      (对于细节性的知识朋友们可以在网上找到大量资料这里不再做重复说明)   (以上来自网络转载)

三、CRC校验码方式有哪些:

          1 byte checksum 

          CRC-16    

          CRC-16 (Modbus)  
          CRC-16 (Sick)  
          CRC-CCITT (XModem)  
          CRC-CCITT (0xFFFF)

          CRC-CCITT (0x1D0F)

          CRC-CCITT (Kermit)  
          CRC-DNP          

          CRC-32

对于以上方式来说结果可以生成为ASCII、HEX等方式

四、JAVA实现CRC校验

     (1)这里对于CRC-CCITT四种方式进行梳理:

        

猜你喜欢

转载自blog.csdn.net/qq355667166/article/details/6255243