1. 奇偶校验
计算机中的数据都是用0、1表示的,在物理层面,就是高电平和低电平,这就存在数据出错的可能性。
在我们下载文件的时候,我们往往需要确认一下我们下载的文件有没有损坏或者被别人修改过,这时候我们就可以使用奇偶校验来计算校验码再和官方提供的校验码做对比。
1) 计算校验码
首先讲数据进行分组,比如8位是一组,每一组对应一个校验码位。如果8位数据有奇数个1,那么校验码位就是1,如果8位数据位有偶数个1,那么校验码位就是0。
2) 缺陷
第一,如果是两位数据位同时发生错误,校验位不变,就检测不出来了。
第二,没有办法纠正错误
2. 海明码
海明码是可以纠正错误的一种校验码,但是只能纠正一位错误。
1) 原理
海明码是通过推理排除的方法来纠正错误的。假设数据位有K位,校验位是N位,那么我们需要满足K + N + 1 <= 2^N,也就是说,校验码也有可能出现错误。
下面我们假设数据位有4位,校验位有3位。
(1) 计算校验位
3位校验码分别计算排除第三位数据位、排除第二位数据位、排除第一位数据位的校验码。校验码的计算可以使用奇偶校验。
(2) 校验
进行校验的时候,如果d1出错了,则p1和p2校验失败。如果d2出错了,则p1和p3校验失败。如果d3出错了,则p2和p3校验失败。如果d4出错了,则p1、p2和p3校验都失败。
如果是校验位出错,则就是对应的校验位一位出错。
2) 实现
我们依旧假设4位数据位3位校验位
第一步,将所有位进行编号,并把编号转换为二进制
第二步,选取2的整次幂作为校验位1、2、4,剩下的作为数据位
第三步,计算校验位。p1选取二进制倒数第一位为1的编号位进行计算。p2选取二进制倒数第二位为1的编号位进行计算。p3选取二进制倒数第三位为1的编号位进行计算。