使用什么算法来计算数字列表的校验位?
列表的长度在 8 到 12 位之间。
另请参阅:
如何生成验证码/号码?
使用什么算法来计算数字列表的校验位?
列表的长度在 8 到 12 位之间。
另请参阅:
如何生成验证码/号码?
Luhn 算法对于信用卡行业来说已经足够好了……
正如 RichieHindle 所指出的,Luhn 算法非常好。它将检测(但不正确)任何一个错误或转置(0 和 9 的转置除外)。
您也可以考虑ISBN 校验位的算法,尽管对于旧式 ISBN,校验位有时是“X”,如果您使用整数字段,这对您来说可能是个问题。新型 ISBN 似乎没有这个问题。维基百科没有涉及系统的理论属性,但我记得很久以前在我的编码理论课程中研究过 ISBN 数字,所以我认为它们非常好 :-)
我知道这有点晚了(根据发布日期),但我第一次需要支票号码算法是在上周。
所以我检查了更多算法,恕我直言,最好的解决方案似乎是Damm 算法。它易于实现并检测大多数测试错误。使用默认数字检查表可以检测到所有个位数错误、所有英语听错错误、所有相邻换位错误和几乎所有跳跃换位错误。
对我来说只有一个问题,因为我不仅需要从数字计算校验位,还需要从字符计算校验位。对我来说不幸的是,有一个给定的规则,即最后一个字符必须是数字。或者更好地说,字符是由第三方授权分配的,并且只有固定数量的数字用作制造商编号。
将字符转录为数字的方法有很多,但与仅使用数字时相比,错误检测总是较低。
对于这些情况,您可以使用ISO_6346规范。
如果没有这样的限制,请使用不同大小的表格,并为表格值分配字符和数字。
编辑:更新/修复了描述,添加了字符数字校验码的原因,并添加了不同基本尺寸的表格。
Verhoeff,没有比 IMO 更好的了。