CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。实际上,除数据通信外,CRC在其它很多领域也是大有用武之地的。例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑。
计算过程:
1、由多项式得到除数n位
2、将需要发送的数据左移(n-1)位,得到余数
3、将第二步得到的余数加原始数据后面发送
接收方检验方法:将收到的数据模“2”除法除以除数,余数为0,数据正确,否则错误!
规范介绍
下表中列出了一些见于标准的CRC资料:

生成多项式的最高幂次项系数是固定的1,故在简记式中,将最高的1统一去掉了,如04C11DB7实际上是104C11DB7。 前称CRC-CCITT。ITU的前身是CCITT。
注释:
1、生成多项式是标准规定的
2、发送方和接收方必须事先商定一个生成多项式G(x),其高位和低位必须是1。
只能检测发生了错误,不能识变错误位置。
例题
待发送的信息为:101001,生成多项式为 G(x)=x^3+x^2+1,计算余数。
原始数据101001,后面加生成多项式最高次幂个0,即3个0,得到101001000。
除数由生成多项式系数凑成,即1101。
模2运算:即异或运算

接收方收到的信息为101101001,已知生成多项式为 G(x)=x^3+x^2+1,判断是否误码。




计算得余数为1110。发送出的原始数据加冗余码为11010110111110,如果接收到11010110111100; 如果接收到11010110111000
参考:
https://blog.csdn.net/qq_43441284/article/details/124945020