CRC校验概念介绍
CRC,全称是Cyclic Redundancy Check,即循环冗余校验,它是一种计算校验码的方法。
生成多项式
可以用一个二进制比特位的序列来表示。例如生成多项式的二进制比特位序列是11001,X的指数就表示该比特位为1。二进制比特位序列的位数是生成多项式的最高次幂 +1。例如,生成多项式的最高次幂是4,对应的二进制比特位序列的位数是5。
多项式POLY(Hex)
生成多项式对应的二进制比特序列转换为十六进制。
例如生成多项式的二进制比特位序列是11001,对应的POLY值为0X19。
校验码的位数
校验码的位数等于生成多项式二进制的位数 - 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。生成多项式是,对应的二进制比特位序列是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除法,能够整除,校验正确: