代码校验位及其计算方法

原文地址:http://www.docin.com/p-1030122068.html

代码是代表事物名称、属性、状态等的符号,它为事物提供了一个概要而不含糊的认定,一般用数字、字母或它们的组合来表 示。 代码可以提高处理的效率和精度,提高了数据的全局一致性。 代码是系统数据检索的关键字,代码是否正确,直接关系到系统效 率和数据的准确性。 由于代码作为计算机的重要输入内容之一,其正确性直接影响计算机处理的质量,因此需要对输入到计算机中 的代码进行校验。

常见代码校验方法

常见的代码校验方法主要有以下两种:

  1. 带校验位的代码校验方法 带校验位的代码校验方法要求所设计的代码结构中含有校验位,通常是代码的最后一位(或多位)。 校验位的值是按某种计算 方法,由代码的各个位的值计算出来的。 带校验位的代码校验方法的缺点是,使代码长度增加了一位(或多位)。

  2. 代码库检索校验方法 代码库检索校验方法采用检索代码库的办法,实现代码的校验。 具体地说,就是首先建立起标准的代码库,然后,当输入代码 时,都要到代码库中检索该代码,如果检索成功,则说明所输入的代码是正确的。 代码库检索校验方法的校错率为百分之百。 其缺点是频繁检索代码库会使系统效率降低,尤其对于大型数据库。

2 带校验位的代码校验方法

带校验位的代码校验方法的基本原理是:按预先规定的算法,根据原代码值算出校验位值,附加在源代码后。 代码输入后再用 同样的算法,根据原代码自动计算校验位的值,以校验输入的正确性。 带校验位的代码校验方法事实上将校验位变成代码的一个组 成部分,即“代码值=原代码+校验位”。 带校验位的代码校验方法具有很强的校错能力,可以发现以下各种错误:

  • 抄写错误,例如 1 写成 7。
  • 易位错误,例如 1234 写成 1324。
  • 双易错误,例如 1234 写成 1423。
  • 随机错误,包括以上两种或三种综合性错误或其他错误。

3 “加权取余”方法 计算校验值的方法有许多种,各具不同的优缺点。 “加权取余”方法是其中一种常用的方法。

3.1 校验值的生成过程

第一步:对原代码中的每一位加权求和 S。 n 位代码为:C1 C2 C3 ... Cn 权因子为: P1 P2 P3 ... Pn 加权和为: S=C1×P1+C2×P2+C3×P3+...+Cn×Pn 其中,权因子可以任意选取,选取原则以提高错误发生率为基础。 常用的有:全取 1;几何级数 20、21、22、...;摆动数列 1、2、1、2、 ...;质数 2、3、5、...等等。

第二步:求余数 R。

用加权和 S 除以模数 M 可得余数 R,即:S/M=Q...R(Q 为商数)。 其中,模数 M 也可任意选取,同样以提高错误发生率为基础。 常用的模数为 10 和 11。

第三步:选择校验值。

可选用下述方法中的一种获得校验值:

  1. 余数 R 直接作为校验值。
  2. 把模数 M 和余数 R 之差(即 M-R)作为校验值。
  3. 取 R 的若干位作为校验值。 把获得的数校验值放在原代码的最后作为整个代码的组成部分。

3.2 实例计算校验值

例:假设原代码是 35186,采用“加权取余”校验方法生成该代码的校验值。 1选取加权因子为 24、23、22、21、20,然后加权求和: S=3×24+5×23+1×22+8×21+6×20=48+40+4+16+6=114 求余数:S/M=114/11=10...4(R)。 如果余数 R 为 10,则按 0 处理。 3加上校验值 7 以后的代码值为 351867。

4 结束语

算术级数法、几何级数法和质数法等都属于“加权取余”方法范畴,它们的区别在于使用了不同的权因子。 当权因子是自然数时 称为算术级数法,当权因子是几何级数时称为几何级数法,当权因子是质数时称为质数法。 我国现行使用的第二代 18 位公民身份 证号码也是采用的“加权取余”方法,其国家标准是 GB 11643-1999,第 18 位是校验位,是根据前面 17 位数字,按照 ISO 7064:1983. MOD 11-2 校验码系统计算出来的检验码。 因此,不论是在日常生活,还是在社会和科技领域,校验位检验的使用是很广泛的。

参考资料

VIN码含义及其算法