参考资源
CRC在线计算工具
常见CRC参数模型
Catalogue of parametrised CRC algorithms
点击某一个,可以看到详情。例如,点击CRC宽度是32位的:
下表拷贝自:CRC(循环冗余校验)在线计算_ip33.com
CRC校验概念介绍
CRC,全称是Cyclic Redundancy Check,即循环冗余校验,它是一种计算校验码的方法。在数据通信、存储等领域有广泛应用。
在发送端对数据做多项式计算,将计算得到的结果(即校验码)附在原始数据后面;接收端也执行同样的算法,以校验数据的完整性和正确性。
生成多项式
可以用一个比特位的序列来表示。
例如,生成多项式的比特位序列是10011,X的指数就表示该比特位为1。比特位序列的位数是生成多项式的最高次幂 +1。该生成多项式的最高次幂是4,对应的比特位序列的位数是5。
再例如,生成多项式的比特位序列是1 1000 0000 0000 0101。
宽度(WIDTH)
指CRC校验码的比特位数,它比生成多项式的比特位序列少1位,它也等于生成多项式的最高次幂。
例如,生成多项式的宽度是4。
再例如,生成多项式的宽度是16。
多项式(POLY)
生成多项式比特位序列的简写,忽略了生成多项式比特位序列最高位的1,结果用十六进制表示。
例如,生成多项式的比特位序列是10011,忽略最高位的1得到0011,对应的POLY值为0X03。
再例如,生成多项式的比特序列是1 1000 0000 0000 0101,忽略最高位的1得到1000 0000 0000 0101,对应的POLY值为0X8005。
校验原理
通信双方约定好一个生成多项式。设校验码的位数是R,信息码的位数是K。
发送端
1、发送端将信息码左移R位,空出来的位置上补0,生成一个K+R=N位的二进制序列;
2、上面生成的N位的二进制序列对生成多项式做模2除法,得到一个余数。如果余数的位数不够R位,则前面补0;
3、将余数替换第1步生成的N位的比特位序列的末尾的R个0,最后得到要发送的N位的比特位序列,并发送出去。
接收端
将接收到的N位的比特位序列对生成多项式做模2除法,如果能够整除,证明信息发送过程中没有变化,校验成功;如果不能整除,证明信息发送过程中发生了变化,校验失败。
计算示例
假设原始信息码的比特位为序列是1101110011,那么长度K=10。生成多项式是,对应的比特位序列是11001,那么校验码的位数R=4位。
发送端
1、将10位的信息码左移4位,空出来的位置上补0,生成一个14位的比特位制序列:11011100110000。
2、将11011100110000对11001做模2除法,得到4位的余数为0110:
3、 将4位余数0110替换11011100110000末尾的4个0,得到要发送的14位比特位序列为:
11011100110110
接收端
接收端收到的14位比特位序列为11011100110110,将该序列对生成多项式(对应的比特位序列11001)做模2除法,能够整除,校验正确: