CRC循环冗余校验
循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。——来自百度百科
CRC码: 数据 + 校验码,下面介绍校验码的计算及原理
- CRC校验码是通过模二除法(一种二进制的除法,被除数就是数据的二进制后面跟若干个0)得到的。 注:0的个数是除数的二进制位数减一
- 既然是通过除法得到,那就会有一个除数(通过多项式得到) 关于多项式的生成,有它对应的标准
- 通过上述的除法运算,就会得到一个余数,余数就是校验码
举个例子吧: 某循环冗余码的生成多项式G(X)=X3+X2+1,用此生成多项式产生的冗余位,加载信息位后形成CRC码。若发送的信息位1111,写出CRC码。
- 首先,通过多项式,可以得到除数为1101
- 除数有4位,则被除数就是数据后面再加3个0,得到被除数1111000
- 接下来进行模二除,得到余数为111,则校验码就是111,CRC码就是1111111 模二除后,得到的余数与被除数相加后,就可以整除新的被除数,所以,接收方用多项式产生的除数模二除CRC码可以整出,即余数为0,这样;如果不为0,则为有错
在下也是个学生党,水平不高,对于深层次的数学知识也不太懂,对于这篇文章,希望可以帮助大家理解CRC的工作机制,不必追究更深的理论