常见的校验码包括奇偶校验码、海明码和循环冗余校验码,是软件评测师考试的高频考点,经常出现在上午场的客观选择题当中。计算机系统运行时,各个部件之间要进行数据交换,为了确保数据在传送过程中正确无误,一是提高硬件电路的可靠性,二是提高代码的校验能力,包括查错和纠错。通常使用校验码的方法来检测传送的数据是否出错。下面就各种校验码的基础知识进行总结学习。
一、奇偶校验码
奇偶校验是一种简单有效的校验方法。这种方法通过在编码中增加一个校验位来使编码中1的个数为奇数(奇校验)或者偶数(偶校验),从而使码距变为2。一个编码系统中任意两个合法编码之间不同的二进数位数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。例如单独来看,0110和0100码距为1,1001和1111码距为2。但是在整个8421码系统来看,码距就是1,因为整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。
对于奇偶校验,它可以检测代码中奇数位出错的编码,但不能发现偶数位出错的情况,即当合法编码中奇数位发生了错误,也就是编码中的1变成0或0变成1,则该编码中1的个数的奇偶性就发生了变化,从而可以发现错误。但是奇偶校验码只能发现错误,而不能矫正错误。常用的奇偶校验码有3种:水平奇偶校验码、垂直奇偶校验码和水平垂直校验码。
二、海明码
海明码(Hamming Code)是由贝尔实验室的Richard Hamming设计的,它也是利用奇偶性来检错和纠错的校验方法。海明码的构成方法是在数据位之间的确定位置上插入k个校验位,通过扩大码距来实现检错和纠错。
设数据位是n位,校验位是k位,则n和k必须满足以下关系:2^k -1≥n+k。
例如,对于8位的数据位,进行海明校验需要4个校验位。令数据位为D7、D6、D5、 D4、D3、D2、D1、D0, 校验位为P4、P3、 P2、 P1,形成的海明码为H12、H11、... 、 H3、 H2、 H1,数据位与校验位在海明码中的位置如下所示:

校验位设置在2^i位置,因此P对应H1,P2对应H2,P3对应H4,P4对应H8。每个校验位只校验数据位中位置号的二进制编码和自身位置号的二进制编码相匹配的数据位。例如,D3 (H7)的位置号为7 (=4+2+1), 因此该数据位由P1、P2和P3校验。
三、循环冗余校验码
循环冗余校验码(Cyclic Redundancy Check,CRC) 广泛应用于数据通信领域和磁介质存储系统中。它利用生成多项式为k个数据位产生r个校验位来进行编码,其编码长度为k+r。CRC的代码格式为:

由此可知,循环冗余校验码是由两部分组成的,左边为信息码( 数据),右边为校验码。
若信息码占k位,则校验码就占n-k位。其中,n为CRC码的字长,所以又称为(n,k)码。校验码是由信息码产生的,校验码位数越长,该代码的校验能力就越强。在求CRC编码时,采用的是模2运算。模2加减运算的规则是按位运算,不发生借位和进位。
下面是近几年对校验码考察过的真题(2018年没考),以后仍是考试出题的重点,大家要重视起来。
【2017年12题】采用模2除法进行校验码计算的是( )
A、CRC 码
B、ASCII 码
C、BCD 码
D、海明码
解析:本题考查校验码的基础知识。
CRC码:即循环冗余校验码,是一种数据传输检错功能,在求CRC编码时,采用的是模2运算。
ASCII码:是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,是现今最通用的单字节编码系统。
BCD码:亦称二进码十进数或二-十进制编码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码,可分为有权码(8421码)和无权码(余3码和格雷码)。
海明码:是由贝尔实验室的Richard Hamming设计的,它也是利用奇偶性来检错和纠错的校验方法。海明码的构成方法是在数据位之间的确定位置上插入k个校验位,通过扩大码距来实现检错和纠错。
故正确答案为:A
【2019年12题】以下关于海明码的叙述中,正确的是( )。
A、校验位与数据信息位混淆且随机分布
B、数据信息位与校验位需要满足一定的位置关系
C、需将所有校验位设置在所有数据信息位之后
D、校验位的长度必须与数据信息位的长度相同
解析:本题考查校验密码的基础知识。
海明码是由贝尔实验室的Richard Hamming设计的,它也是利用奇偶性来检错和纠错的校验方法。海明码的构成方法是在数据位之间的确定位置上插入k个校验位,通过扩大码距来实现检错和纠错。
故正确答案为:B
作者唯一官方个人微信公众号(昊洋与你一起成长):HYJY20180101
写于2021年9月6日
作者:昊洋讲师
版权所有,侵权必究




