校验码是指能够发现或能够自动纠正错误的数据编码,也称作检错纠错码。原理是通过增加一些冗余码,来检验或纠错编码。通常某种编码有许多码字构成,任意两个合法码字之间最少变化的二进制位数,称为数据校验码的码距,如 1100 和 1101 之间的码距为 1,因为只有最低位翻转了;而 1001 和 0010 之间的码距为 3,因为只有 1 位没有变化。对于码距不小于 2 的数据校验码,开始具有检错的能力。码距越大,检错纠错的能力越强,而且检错能力总是大于等于纠错能力。
常用的校验码有奇偶校验码、海明校验码和循环冗余校验码。
奇偶校验码
定义:在被传送的 n 位代码上增加一位校验位,并使其配置后的 n+1 位代码中“1”个数为奇数,则称为奇校验;若配置后“1”的个数为偶数,则称为偶校验。
海明校验码
定义:明码是一种多重奇偶校验码,原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中;当某一位出错后,就会引起有关的几个校验位的值发生变化,不但可以发现错位,还能指出出错的位置,为自动纠错提供依据。根据纠错理论得:L - 1 = D + C 且 D≥C,即编码最小码距 L 越大,其检测错误的位数 D 越大,纠正错误的位数 C 也越大,且纠错能力恒小于等于检错能力。
循环冗余校验码
定义:循环冗余校验码(Cycle Redundancy Check)是基于模 2 运算而建立编码规律的校验码。 ,模2 运算不考虑进位和错位,规律如下:
(1)模 2 加和模 2 减的结果是相等的,即 0±1=1,0±0=0,1±0=1,1±1=0,两个相同数模 2 和恒为 0.
(2)模2 乘是按模 2 和求部分之和。
(3)模 2 除是按模 2 减求部分余数;每求一位商应使部分余数减少一位。上商的原则是:当部分余数的首位为 1 时,上商 1;当部分余数的首位为 0 时,上商 0;当部分余数的位数小于除数的位数时,该余数即为最后余数。