简单校验可以帮助解释数据是否发生某些错误,但不能因为检查通过就认定记录完全可靠。偶校验特别适合演示单个位翻转与两个位翻转为什么会得到不同检查结果。
这份练习把数据、规则和中间状态一起列出。可以先自行推演,再与过程记录逐项比较;如果结果不同,先找到第一处分歧,确认时间单位、端点归属和运算顺序。案例是一套限定模型,不把其他作品的不同实现认定为错误。
规则与输入
把数据位和最后一个校验位的总一位数保持为偶数。接收端只检查总数奇偶;本例使用确定的数据与翻转位置,不涉及加密、身份认证或对不可信数据的安全承诺。
数据1100111001,末尾附加校验位0 [[], [9], [5, 6], [6, 5, 4], [9, 7, 8], [0, 7, 5, 2], [5, 6, 3, 10, 1], [0], [10, 9], [7], [10, 1, 5]]
逐项推演
翻转位置[],得到11001110010,一位数6;偶校验通过,实际改动了0个位置。
翻转位置[9],得到11001110000,一位数5;偶校验失败,实际改动了1个位置。
翻转位置[5, 6],得到11001000010,一位数4;偶校验通过,实际改动了2个位置。
翻转位置[6, 5, 4],得到11000000010,一位数3;偶校验失败,实际改动了3个位置。
翻转位置[9, 7, 8],得到11001111100,一位数7;偶校验失败,实际改动了3个位置。
翻转位置[0, 7, 5, 2],得到01101011010,一位数6;偶校验通过,实际改动了4个位置。
翻转位置[5, 6, 3, 10, 1],得到10011000011,一位数5;偶校验失败,实际改动了5个位置。
翻转位置[0],得到01001110010,一位数5;偶校验失败,实际改动了1个位置。
翻转位置[10, 9],得到11001110001,一位数6;偶校验通过,实际改动了2个位置。
翻转位置[7],得到11001111010,一位数7;偶校验失败,实际改动了1个位置。
翻转位置[10, 1, 5],得到10001010011,一位数5;偶校验失败,实际改动了3个位置。
检查通过4组;其中仍可能包含多个位置已经改变的记录。
复核与使用边界
直接统计一的数量,与逐位异或的结果比较。翻转奇数个不同位置会改变奇偶,翻转偶数个位置可能仍通过;校验失败也不能指出具体哪一位出错。
检查通过只表示这个很弱的校验条件满足。它既不能恢复原数据,也不能阻止人为修改;本例用于理解差错检查能力的边界,不能把它当作完整存档校验或安全验证方案。
复盘时建议保留输入表和中间状态,而不仅保存最终答案。改动一个条件后重新推演,再检查起点、终点、重复值和临界输入;这样能把规则本身、计算实现和显示结果分别核对,避免把一次偶然相同当成验证完成。
