cyclic redundancy check
CRC 循环冗余校验码
奇偶校验其实就是CRC校验的一种特例
循环冗余校验码由信息码n位和校验码k位构成。k位校验位拼接在n位数据位后面,n+k为循环冗余校验码的字长
具有检错、纠错能力的校验码
模二除法(模二除法的结果不等于普通除法)
当部分余数首位是1时商取1,反之商取0。然后每一位的减法运算是按位减,不产生借位
例如:
如果要传输的数据为:1101011011
除数设为:10011
在计算前先将原始数据后面填上4个0:11010110110000,之所以要补0,后面再做解释。
从这个例子可以看出,采用了模2的加减法后,不需要考虑借位的问题,所以除法变简单了。最后得到的余数就是CRC 校验字。为了进行CRC运算,也就是这种特殊的除法运算,必须要指定个被除数,在CRC算法中,这个被除数有一个专有名称叫做“生成多项式”。
生成多项式的最高阶数,就是要补0的个数。
生成多项式的选取是个很有难度的问题,如果选的不好,那么检出错误的概率就会低很多。好在这个问题已经被专家们研究了很长一段时间了,对于我们这些使用者来说,只要把现成的成果拿来用就行了。
计算方法:
1.计算冗余位的位数,即生成多项式的最高阶数
2.在信息位后补冗余位个数的0
3.将第二步的结果与生成多项式相除,这里采用的除法叫做模2除法,就是只要部分余数的高位为1,便可商1 之后上下做的减法是异或。
4.经过第三步不断地计算后得到余数
将信息为后面补的0换成余数