CRC-32在线校验网址:(以下都可以)
http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
https://www.lammertbies.nl/comm/info/crc-calculation.html
CRC即循环冗余校验(Cyclic Redundancy Check),CRC是一种常用的检错码,并不能用于自动纠错
CRC码校验原理:
发送端:发送端根据信息字段与生成多项式生产呢个CRC码,CRC码作为数据发送给接收端,同时也会把计算出的校验字段的数据一同发送(注:目的是如果接受端检测到发送的数据是正确的,接收端能够从CRC码中提取出信息字段的数据)。
接收端:接收到CRC码数据后,检测接收到的数据是否正确,方法:将CRC码数据与生成多项式进行模2除,如果余数为0,则说明接收到的数据是正确的。然后,从CRC码中提取出信息字段的数据。
发送端生成CRC码方法:
CRC码是由两部分组成的,前部分是信息字段,就是需要校验的信息,后部分是校验字段,如果CRC码共长n个bit,信息字段长k个bit,就称为(n,k)码。它的编码规则是:
- 首先将信息字段值(k bit)左移r位(k+r=n)
- 运用一个生成多项式g(x) (也可看成二进制数) 模2,除上面的式子,得到的余数就是校验字段值。模2运算实际上是按位异或(Exclusive OR)运算,即相同为0,相异为1,也就是不考虑进位、借位的二进制加减运算。
- 生成的CRC码值为:信息字段值+校验字段值(单位:位bit,次序:高位到低位),例如字段值为1001,校验字段值为110,则CRC码为1001110
常见的多项式:
CRC8=X8+X5+X4+1
CRC-CCITT=X16+X12+X5+1
CRC16=X16+X15+X5+1
CRC12=X12+X11+X3+X2+1
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1
如CRC8对应代码:100110001
下面是看起来复杂,其实就是套公式的数学公式计算方法:
设待校验的信息码有k位,即:m = (mk-1、mk-2、mk-3……m1、m0), 多项式m(x)可表示为
m(x) = mk-1xk-1+ mk-2xk-2 +……m1x1+ m0x0 ----------------------------------------------------------------- 式(1)
用多项式g(x)的最高次幂R对应的XR 乘以m(x),将得到式(2)
XR m(x) = mk-1xk+R-1+ mk-2xk+R-2 +……m1x1+R+ m0x0+R -----------------------------------------------------式(2)
将XR m(x) 模2除以g(x),得到多项式商为A(x),余数为r(x),即:
A(x)g(x) = XR m(x) +r(x) ------------------------------------------------------------------------------------------式(3)
余数多项式r(x)可表示为
r(x) = rR-1xR-1+ rR-2xR-2 +……r1x1+ r0x0 ------------------------------------------------------------------------式(4)
将式(2)和式(4)代入式(3)得
A(x)g(x) = mk-1xk+R-1+ mk-2xk+R-2 +……m1x1+R+ m0x0+R + rR-1xR-1+ rR-2xR-2 +……r1x1+ r0x0 ---------式(5)
式(5)对应的码组为K+R位,即:
N = (mk-1+ mk-2 +……m1+ m0 + rR-1+ rR-2 +……r1+ r0) ------------------------------------------------------式(6)
从M到N就是CRC的编码过程mk-1+ mk-2 +……m1+ m0 为K位信息码;rR-1+ rR-2 +……r1+ r0为R位校验码。
信息接收端,将接受到的K+R位码除以相同的多项式g(x),根据式(3)所产生的余数为0,则接受到的数据信息正确无误,否则则认为信息在传输过程中产生的误码。
根据式(1)~式(6),CRC编码必须进行模2除运算,CRC的校验位就是模2除得到的余数,如果余数用寄存器的存数表示,模2除用异或门表示,那么通用的CRC串行电路就可以同图6.2所示的电路来实现。
参考:https://blog.csdn.net/u013898698/article/details/78864161
https://blog.csdn.net/android_mnbvcxz/article/details/78902737