CRC循环冗余校验码
我们知道不同的校验码都有着独特的校验方法,CRC校验码则是根据余数来进行校验的。
简单的来讲就是现在我要给你发送数据,我们来保证这串数据除以5没有余数,那么你拿到数据后想要判断它有没有出错,是不是就要拿你接受到的去除以5,要是没有余数则没有出错,反之出错。
那么如何保证没有余数呢?这就是校验码的工作了。
K:信息位的个数。
R:校验码的个数。(等于生成多项式最高次数)
1. 确定被除数以及除数
现在基本思想我们知道了,但是说是规定除以一个数这个数一般不会直接给,而是给你多项式方程让你自己写出来。下面通过例题来说明比较好理解一点,
可以看到生成多项式在题干中的作用就是来给我们送除数的,除数是1101。
被除数就是在信息的基础上添加R个0在本例题中R=3,你说哪来的R?往上翻第一个图,R就是校验码的位数。
也就是说被除数是101001000。
2. 求余数
我们都知道被除数除以除数等于商加余数,但是我们数据都是用二进制表示的,所以这里的除法跟小学的还不太一样,你先知道它叫模2除法,下面还通过同一个例题说明:
其实只要记住两个特点就行:
- 一次只算一位。
- 不借位等同于借位。
自己好好理解一下,就是与小学学的除法唯一不同就是0-1=1,关于第一条其实一次多算几位也没事,可以自己对比一下左右两种算法(左边是中规中矩的计算,步骤较繁琐),如果理解了为什么那就证明你已经掌握了,不理解就按照(左边那种)上面那两条规则一步一步算不会出错。
3.确定数据
求出余数后,将刚才添加的0换成余数,余数才是校验位上应该放的值,起初全部放0只是为了求余数。
例题种的余数为001,所以发送的数据应该为,101001001.(一般题目只让求CRC码到这里答案就出来了)
4. 检验
收到数据后检验,就是拿收到的除以约定好的除数,若余数为0(也就是没有余数)则无错,反之出错。
下面附上完整例题:
后检验,就是拿收到的除以约定好的除数,若余数为0(也就是没有余数)则无错,反之出错。
下面附上完整例题: