用什么算法计算校验位?

时间:2009-07-08 21:53:17

标签: algorithm checksum error-checking data-consistency

用于计算数字列表的校验位的算法是什么? 列表的长度在8到12位之间。

另见:
How to generate a verification code/number?

5 个答案:

答案 0 :(得分:7)

Luhn algorithm对于信用卡行业来说已经足够了......

答案 1 :(得分:5)

RichieHindle指出,Luhn算法非常好。它将检测(但不正确)任何一个错误或转置(除了转换0和9)。

你也可以考虑ISBN check digits的算法,虽然对于旧式ISBN,校验位有时是“X”,如果你使用整数字段,这对你来说可能是一个问题。新式ISBN似乎没有这个问题。维基百科没有深入研究系统的理论属性,但我记得很久以前我的编码理论课程中研究过ISBN编号,所以我认为它们非常好: - )

答案 2 :(得分:3)

答案 3 :(得分:2)

Verhoeff,没有更好的IMO。

答案 4 :(得分:2)

我知道它有点晚了(根据发布日期),但我上周第一次需要支票号算法。

所以我检查了更多的算法和恕我直言,最好的解决方案(仅限数字)似乎是Damm algorithm。 它很容易实现并检测大多数测试错误(所有单个数字错误和所有转置错误,几乎所有跳转转换错误)

对我来说只有一个问题,因为我需要不仅从数字而且从字符计算校验位。有多种方法可以将字符转换为数字,但错误检测总是低于仅使用数字。

对于这些情况,您可以使用ISO_6346规范。