CRC(Cyclic Redundancy Check)校验

CRC校验介绍

CRC,全称是Cyclic Redundancy Check,即循环冗余校验,它是一种计算校验码的方法。

生成多项式

可以用一个二进制比特位的序列来表示。例如生成多项式G(X)=X^{4}+X^{3}+1的二进制比特位序列是11001。二进制比特位序列的位数是生成多项式的最高次幂 +1。例如,生成多项式的最高次幂是4,对应的二进制比特位序列的位数是5。

校验码的位数

校验码的位数等于生成多项式二进制的位数 - 1,即最高次幂的数值。例如,生成多项式G(X)=X^{4}+X^{3}+1的二进制位数是5,那么校验码的位数等于5-1=4。

校验原理

通信双方约定好一个生成多项式。设校验码的位数是R,信息码的位数是L。

发送端

1、发送端将信息码左移R位,空出来的位置上补0,生成一个L+R位的二进制序列;

2、上面生成的L+R位的二进制序列对生成多项式做模2除法,得到一个余数。如果余数的位数不够R位,则前面补0;

3、将余数替换第1步生成的L+R位的二进制序列的末尾的R个0,最后得到要发送的L+R位的二进制序列,并发送出去。

接收端

将接收到的L+R位的二进制序列对生成多项式做模2除法,如果能够整除,证明信息发送过程中没有变化,校验成功;如果不能整除,证明信息发送过程中发生了变化,校验失败。

计算示例

假设原始信息码是1101110011,那么长度L=10。生成多项式是G(X)=X^{4}+X^{3}+1,对应的二进制比特位序列是11001,那么校验码的位数R=4位。

发送端

1、将10位的信息码左移4位,空出来的位置上补0,生成一个14位的二进制序列:11011100110000。

2、将11011100110000对11001做模2除法,得到4位的余数为0110:

CRC(Cyclic Redundancy Check)校验_第1张图片

3、 将4位余数0110替换11011100110000末尾的4个0,得到要发送的14位二进制序列为:

11011100110110

接收端校验

 接收端收到的14位二进制序列为11011100110110,将该序列对生成多项式(对应的二进制序列11001)做模2除法,能够整除,校验正确:

CRC(Cyclic Redundancy Check)校验_第2张图片

你可能感兴趣的:(算法)