CRC循环冗余校验基本原理
CRC循环冗余校验基本原理
循环冗余校验码又称多项式校验码,它的构造过程与多项式运算有关
现在发送方要发送一条数据,比如说为1011001,然后他要和接收方选取一个除数,比如11001,然后给数据1011001补上除数的位数-1个0,也就是这里除数是11001有5位数,就给数据1011001补上5-1=4个0变成10110010000,随后计算10110010000模2除11001
这里就要说到这个模2除了,我个人感觉就是按位循环异或,比如说:
这里就先让除数11001从被除数的第一位开始做异或,得到1111,然后再用被除数补一位,这里是补0,因为要补的位置和被除数对应的位置是0(如下图中红线所示),上面的结果就看补位的数量,如果就补一位就写1,如果补两位就写10,三位就写100以此类推,但是上面的结果不重要,我们只要关心最后的余数就好了,现在得到11110
然后 再用除数11001去异或11110,同理我们得到了111.这里才三位,我门要补两位,对应上面被除数补下来的是10(如下图中蓝线所示),就得到了11110,然后同理再用除数11001去异或,一直持续到无法将结果补齐5位数为止(因为除数11001是5位数)
最终就得到了余数1010,注意如果得到的最终余数不足(除数位数-1)位,要在前面补0,比如说最终余数为100,这里除数11001为5位,不足4(5-1)位,就要在前面补0变成0100
随后将这个余数1010拼接到数据1011001后面就变成了最后要发送的10110011010
那么此时接收方只需要将收到的数据模2除11001,看余数是不是0,如果是的话那么数据就没有问题
关于生成多项式也就是生成除数的选择已经被专家们归纳出来了,有很多种,这里不做额外内容,只记录crc原理