8

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

另请参阅:
如何生成验证码/号码?

4

5 回答 5

7

Luhn 算法对于信用卡行业来说已经足够好了……

于 2009-07-08T21:55:57.243 回答
5

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

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

于 2009-07-08T22:18:12.380 回答
4

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

所以我检查了更多算法,恕我直言,最好的解决方案似乎是Damm 算法。它易于实现并检测大多数测试错误。使用默认数字检查表可以检测到所有个位数错误、所有英语听错错误、所有相邻换位错误和几乎所有跳跃换位错误。

对我来说只有一个问题,因为我不仅需要从数字计算校验位,还需要从字符计算校验位。对我来说不幸的是,有一个给定的规则,即最后一个字符必须是数字。或者更好地说,字符是由第三方授权分配的,并且只有固定数量的数字用作制造商编号。

将字符转录为数字的方法有很多,但与仅使用数字时相比,错误检测总是较低。

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

如果没有这样的限制,请使用不同大小的表格,并为表格值分配字符和数字。

编辑:更新/修复了描述,添加了字符数字校验码的原因,并添加了不同基本尺寸的表格。

于 2015-02-17T10:46:56.137 回答
3

卢恩算法

校验位算法

校验位算法导师

ISIN校验位算法

于 2009-07-09T09:02:59.280 回答
2

Verhoeff,没有比 IMO 更好的了。

于 2009-08-29T12:35:02.307 回答