代码的正确性是信息系统的质量保证。在代码的收集、加工、传输、处理过程中常见的几种错误有:抄写错误,如:1写成7;易位错误,如1234写成1324;双易位错误,如26913写成21963;随机错误,包括以上两种或三种综合性错误或其他错误。可见,对输入代码尤其是对重要的实体的代码进行正确性验证是非常必要的。
对代码进行校验的方法较多,这里介绍使用校验位的自校验法。校验位是设计代码结构时,为了保证关键代码输入的准确性、减少输入错误,在原有代码基础上另外加上的一位,是代码的组成部分。校验位的值通过事先规定的数学方法计算出来,代码输入时,计算机会以同样的数学方法按输入的代码计算出校验值,并将它与输入的校验值进行比较,以证实是否有错。
1.校验位的一般算法
校验位的形成一般有三步:第一,各个数据位加权;第二,将各位加权后的值求和;第三,对和值以某个常数为模取余,得到该代码的校验位。用公式表示如下:
(1)将代码(Ci)各位乘以权因子(Pi),求出各位的积:C1P1,C2P2,…,CnPn
(2)求出加权和:S=C1P1+C2P2+…+CnPn
(3)以称为模的常数M除和S,求出余数R,即R=S mod M,校验位J=R。
下面我们介绍几种常用的、校验效果较好的校验位的计算方法。
2.算术级数法
指以自然数序列倒置为权,求得代码的校验位。
例:若原码为“12345”,用算术级数法,以11为模,求该代码的校验位。
原代码: 1 2 3 4 5
各位乘权:6 5 4 3 2
乘积之和:6+10+12+12+10=50
以11为模除以乘积之和,余数作为校验码
50/11=4……6
代码为:123456
3.几何级数法
指以2的指数序列倒置为权,求得代码的校验位。
例:若原码为“12345”,用几何级数法,以11为模,求该代码的校验位。(www.xing528.com)
原代码: 1 2 3 4 5
各位乘权:32 16 8 4 2
乘积之和:32+32+24+16+10=114
以11为模除以乘积之和,余数作为校验码
114/11=10……4
代码为:123454
4.质数级数法
指以质数序列倒置为权,求得代码的校验位。
例:若原码为“12345”,用几何级数法,以11为模,求该代码的校验位。
原代码: 1 2 3 4 5
各位乘权: 17 13 7 5 3
乘积之和: 17+26+21+20+15=99
以11为模除以乘积之和,余数作为校验码
99/11=9……0
代码为:123450
注意:以11为模时,若余数是10,则按0处理。
在校验位计算过程中,只要能检查出代码中可能出现的错误,对于权重的选择没有固定的要求,例如可以使用“1,2,1,2,1,2,……”或“1,3,7,1,3,7,……”等。同样,对于模值也没有固定的要求。
有的算法中,还要在第三步后再加一步,用模值减去余数得到校验位,将模M减去余数R 作为校验位,即J=M-R。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。