CRC校验码,中文是循环冗余校验码。在计算机网络、计算机组成原理等课程中均常见,他是一种常见的计算机校验码。它的实际原理十分容易理解:简单的说,它的原理就是用一个数去除以约定好的数。如果传输前后的数据除以这个数,所得余数一样,则传输正确,反之传输错误。
先举一个十进制的例子,用81除以6,得13,余3. 81就相当于信息位,余数就相当于校验位。添加校验位的目的就是确保余数为0.(这里只是举个例子)
现在用二进制来考虑。在这里以一道例题为准:给出生成多项式G(x)=x3+x2+1 信息码为101001,求对应的CRC码。
1)对于这道题,生成多项式最高次为3,信息码为6,那么CRC码对应为9位。
2)G(x)=1*x3+1*x2+0*x1+1 这就意味着约定的除数为1101.已知信息码和除数,进行竖式模2除。
说明:模2除和普通的竖式除法差别不大,被除数在不足时也需要补零,但是在除得当前位的商时,以最高位为准,目的是消掉目前还剩下的被除数的最高位。此外,在减法时变成了异或计算。
101001除以1101,求得最后的余数为001,001即为校验位。
3)接收方收到101001001后,用1101模2除,余数为000,即表示传输无误。
如果余数不是0,比如001,那么就意味着出错位为第一位,余数002表示第二位出错。。。。。之所以成为循环冗余校验,就是因为用出错的码除以余数,会得到下一个出错码,如xxxx001除以余数变成xxx010.。。。如此往复。
CRC校验码可以检测出奇数个、双比特和所有小于。等于校验位长度的校验码。
原文地址:https://www.cnblogs.com/namezhyp/p/14782370.html