1.CRC(Cyclic Redundancy Check)
循环冗余校验,是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。循环冗余校验(CRC)算法入门引导
1.1.模2运算
乘除法采用正常的多项式乘除法,而加减法都采用位异或运算。
1.2.生成多项式
名称 | 生成多项式 |
---|---|
CRC4 | X4+X1+X0 |
CRC8 | X8+X5+X4+X0 |
CRC12 | X12+X11+X3+X2+X0 |
CRC16 | X16+X15+X2+X0 |
CRC32 | X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0 |
1.3.位宽
多项式的位宽(Width,W),是对应二进制的位数减1。
2.计算过程
在计算前,计算前要在原始数据后根据位宽填上W个0,实现无借位的除法运算。
例如:
要传输的数据为:1101011011
除数设为:10011(CRC4)
在计算前先将原始数据后面填上4(位宽为4)个0:11010110110000
相关介绍
附1.奇偶校验
在接收的信息每个字节后,添加1或者0,作为校验位,数据位和校验位一共所含的1个数为奇数,称为奇校验,否则称为偶校验。接收方通过计算数据中1个数是否满足奇偶性来确定数据是否有错。
附2.累加和校验
最常用的一种实现是在一次通讯数据包的最后加入一个字节的校验数据。这个字节内容为前面数据包中全部数据的忽略进位的按字节累加和。
附3.MSB与LSB
MSB(Most Significant Bit)指最高有效位,即二进制数的最高位,是最高加权位。由于二进制书写上的习惯,MSB通常也指代最左位LMB(Left-most Bit)。
LSB(Least Significant Bit)指最低有效位,即二进制数的最低位。