一丶奇偶校验
意义:
奇[偶校验](Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组[二进制代码]的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为[奇校验],反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个[奇偶校验位],用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。
11100101,那么把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数。
对于偶校验,校验位就定义为1,反之则为0; 偶校验结果为偶数
对于奇校验,校验位就定义为0,反之则为1; 奇校验结果为奇数
1.异或运算: 果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
异或 是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。
一般在[同步传输]方式中常采用奇校验,而在[异步传输方式]中常采用偶校验。
优点:它是使用一位数据能够达到的最好的校验码,并且它仅仅需要一些异或门就能够生成。奇偶校验被广泛应用
缺点:奇偶校验位是一种错误检测码,但是由于没有办法确定哪一位出错,所以它不能进行错误校正。发生错误时必须扔掉全部的数据,然后从头开始传输数据。奇数位误码能检出,偶数位误码不能检出
二丶海明校验
由Richard Hamming于1950年提出、目前还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错、亦能检测出一位出错并能自动恢复该出错位的正确值的有效手段,后者被称为自动纠错。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。
海明校验关键的一个前提是,数据位中只能有一位出错.这也是海明码产生的依据所在:
基本原理:
我们把数据中的每一位依次独立起来,这样只要出错,那么与它相干的校验结果一定与众不同.配上校验码的算法是:每一位的校验位是除该位外其它各位的异或的结果.以(1011) 2为例.其对就校验码为r1r2r3r4 = 0100(r1 = 0⊕1⊕1 = 0,r2 = 1⊕1⊕1,依次计算),这样比如某一位出错,比如第一位,那与第一位相干的r2,r3,r4在做校验时,一定为1,只有r1没有相干,所以为0.表明第一位出错了.若是校验位出错了,如r1出错.那么只有r1的校验结果为1,其它三位校验位都为0.因此,可以辨别是哪一位出错了.(如果第一位出错那么只有第一位是正确的 其他三位都是错的 也就是 1011 与 0100 亦或 如果为 0111判断第一位出错了,1011,是第二位,1101第三位,1110第四位)这种方法,看起来不错,但在数据位太少,如1位或2位时,就无法指示哪一位出错了.而且需要配上跟原数长度一样的校验位,岂不是浪费空间.
改进:
校验位的个数:满足公式:2^r≥k+r+1,其中k为信息位,r为校验位数
校验位的位置:一般都放置在2^n上 也就是1、2、4、8……位置
下面的那张图用来确定每个校验位都校验了哪些位置
第一组:1357 第二组2367 第三组:4567
so:1010 的海明码是:1011010
三。循环冗余校验 CRC校验
冗余校验:
任何一个[散列函数]都可以用于冗余检校验。最简单的冗余校验,叫作[校验和]、[校验码],Longitudinal Redundancy Check)。其它类型的冗余校验包括[循环冗余校验]、水平冗余校验、竖直冗余校验以及Cryptographic Message Digest
大量使用莫2除法