校验码

来源:互联网 发布:天刀体验服账号淘宝 编辑:程序博客网 时间:2024/05/08 11:09

  为什么有校验码呢?在计算机系统运行时,各个部件要进行数据交换,这时难免会出错。为了确保数据在传送过程中正确无误,我们就可以使用校验码的方法来检测传送的数据是否有错。

  常用的校验码有:奇偶校验码、海明码和循环冗余校验码。

奇偶校验码

  奇偶校验是一种很简单有效的校验方法。他分为奇校验和偶校验。他是通过在编码中增加一位校验位来确定编码中1的个数,奇校验是让编码中的1的个数为奇数,偶校验是让编码中的1的个数为偶数。

  奇偶校验能检验像1,3,5...这样奇数个数位出错的编码,不能检验偶数个数位出错的编码。

  常用的奇偶校验码有三种:水平奇偶校验码、垂直奇偶校验码、和水平垂直奇偶校验码。

海明码

  海明码的构成方法是:在数据位之间插入K个校验位,通过扩大码距来实现检错和纠错。求解步骤:

  (1)、设信息位数是k,校验位是r。k,r必须满足式子2^r>=k+r+1。求出满足不等式的最小的r的值。

  (2)、校验码的位置在海明码的2^i-1位置,信息数的位置依序从低到高占海明码中剩下的位置。如下:

  (3)、确定校验关系,如下:

                                                                                        

其中,校验位组就是根据海明码的位数得来的,是在该对应的海明码位数里的校验位。

然后就能求得校验位了,看该校验位位于哪几个信息位中对应校验位中,将那些信息为进行异或运算。

r1=I0,I1,I3,I4,I6进行异或运算;

同理,r2=I0,I2,I3,I5,I6进行异或运算;

r3=I1,I2,I3,I7  进行异或运算;

r4=I4,I5,I6,I7  进行异或运算。

 

循环冗余校验码 CRC

  循环冗余校验码广泛用于数据通信领域和磁介质存储系统中,他利用生成多项式为k个数据位产生r个校验位来进行编码,其编码长度为k+r,左边的是信息码,右边是校验码。校验码是有信息码产生的,校验码位数越长,该代码的校验能力就越强。在求循环冗余校验码时,才有的模2运算,模2运算的规则是按位运算,不发生借位和进位。

  求解步骤:

例如:用生成多项式a(x)=x^5+x^4+x+1,对报文10100110进行CRC编码,求编码后的报文。

(1)将生成多项式写成二进制形式为110011,因为该多项式是5阶的,所以在报文后加上5个0。

(2)然后将添加了5个0的报文和110011进行模2运算,用求得余数11000加在原报文的后面,就求得了用循环冗余校验码编码后的报文。