
奇偶校验法是一种很简朴并且广泛使用的校验方法。
这种方法是在每一字节中加上一个奇偶校验位,并被传输,即每个字节发送九位数据。
数据传输以前通常会确定是奇校验还是偶校验,以保证发送端和接收端采用相同的校验方法进行数据校验。
假如校验位不符,则认为传输出错。
奇校验是在每个字节后增加一个附加位,使得“1”的总数为奇数。
奇校验时,校验位按如下规则设定:假如每字节的数据位中“1”的个数为奇数,则校验位为“0”;若为偶数,则校验位为“1”。
奇校验通常用于同步传输。
而偶校验是在每个字节后增加一个附加位,使得“1”的总数为偶数。
偶校验时,校验位按如下规则设定:假如每字节的数据位中“1”的个数为奇数,则校验位为“1”;若为偶数,则校验位为“0”。
偶校验常用于异步传输或低速传输。
校验的原理是:假如采用奇校验,发送端发送的一个字符编码(含校验位)中,“1”的个数一定为奇数个,在接收端对接收字符二进制位中的“1”的个数进行统计,若统计出“1”的个数为偶数个,则意味着传输过程中有1位(或奇数位)发生差错。
事实上,在传输中偶尔—位出错的机会最多,故奇偶校验法常常采用。
然而,奇偶校验法并不是一种安全的检错方法,其识别错误的能力较低。
假如发生错误的位数为奇数,那么错误可以被识别,而当发生错误的位数为偶数时,错误就无法被识别了,这是因为错误互相抵消了。
数位的错误,以及大多数涉及偶数个位的错误都有可能检测不出来。
它的缺点在于:当某一数据分段中的一个或者多位被破坏时,并且在下一个数据分段中具有相反值的对应位也被破坏,那么这些列的和将不变,因此接收方不可能检测到错误。
常用的奇偶校验法为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验。
奇偶校验分奇校验和偶校验两种,两者类似,以奇校验为例说明。\r\n奇校验是通过在末尾添加1或者0的方式使1的个数为奇数。校验时通过1的个数是否为奇数判断是否出错了。\r\n如 11001100编码后为 11001100 1(最后一位添加为1,使1的个数是奇数5) 11100110编码后则为11100110 0(1的个数已经是奇数,添0)\r\n\r\n当出错个数为奇数时,将导致1的个数的奇偶发生变化,可以检测出错误,而为偶数时,1的个数的奇偶不变,故检测不出。\r\n\r\n例如上例,11001100 1 ,当有3个(奇数个)位出错,假设是后三位那么就变成 11001011 1这时1的个数就变成了6个,可以判断,出错了。而2个(偶数个)位出错,假设是后两位那么就变成 11001111 1这时1的个数为7个,仍然是奇数,就检测不出错误了。\r\n\r\n这里所体验的基本原理是:一个奇数加上偶数仍然是奇数,加上奇数就变成偶数设置为奇校验,先看发送方将要发送的一帧数据中有几个1,如果是偶数个1则校验位置1,保证1的个数是奇数。如果是奇数就置0。保证是奇数后发送给接收方,接受方此时要检查发送的数据位是否有误,它检查的方法就是看接受的数据里1的个数,如果发现1的个数是偶数,再看看发送来的校验位是1且模式是奇校验,偶数+1=奇数,判断数据是正确。
例:发送的数据位是01111 0000 ,使校验位置1,让1 有5个(奇数)。
发送到接受方,接受方检查数据位正确性,发现1有4个(偶数),再看校验位是1,4+1=5(奇数)。判断数据正确
设置为偶校验,先看发送方将要发送的一帧数据中有几个1,如果是奇数个1则校验位置1,如果是偶数就置0。保证1的个数是偶数。保证是偶数后发送给接收方,接受方此时要检查发送的数据位是否有误,它检查的方法就是看接受的数据里1的个数,如果发现1的个数是奇数,再看看发送来的校验位是1且模式是偶校验,奇数+1=偶数,判断数据是正确。
例:发送的数据位是01111 1000 ,使校验位置1,让1 有6个(偶数)。
发送到接受方,接受方检查数据位正确性,发现1有5个(奇数),再看校验位是1,5+1=6(偶数)。判断数据正确
设置为1校验,校验位始终为1,接收方接收到数据发现检验位为1就判断数据正确,这种方法简陋。
设置为0校验,校验位始终为0,接收方接收到数据发现检验位为0就判断数据正确,这种方法简陋。
小结:通常用奇偶校验,本质就是判断数据位中1个数+校验位 = 奇数/偶数的方法。
也存在弊端比如用奇校验发送的是0111 0001 ,校验位是1。但到接收方变成1110 0001 ,接受也判断正确,但数据并不相同。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)