5

我需要选择一个校验和算法来检测用户何时通过在代码末尾添加 1 个字符(也在 [A-Z0-9] 中)输入错误的 4 个字符 [A-Z0-9] 代码。

对 ASCII 代码求和并应用模数是一个糟糕的解决方案,因为不会注意到反转 2 个击键。

我可能会使用 Fletcher 算法,但我想知道是否有人知道为此用例设计的算法(非常少量的字节,取决于位置)?

谢谢你。

4

1 回答 1

8

您可以尝试 ISO 7064 Mod x,y 算法。根据 ISO 描述:

ISO/IEC 7064:2002 中指定的校验字符系统可以检测 ( http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=31531 ):

  • 所有单个替换错误(将单个字符替换为另一个字符,例如 4234 替换为 1234);
  • 所有或几乎所有单个(本地)转置错误(两个单个字符的转置,相邻或它们之间有一个字符,例如 12354 或 12543 用于 12345);
  • 全部或几乎全部移位错误(整个字符串向左或向右移位);
  • 高比例的双重替换错误(同一字符串中有两个单独的单一替换错误,例如 7234587 对应 1234567);
  • 所有其他错误的比例很高。

您可以找到一些部分实现,例如:

例如,您可以使用 ISO 7064 Mod 37,36,它可以使用 0-9 和 AZ(数据和校验字符)。算法的详细描述(如果您不想购买 ISO)可以在以下位置找到:

于 2012-06-28T12:26:06.617 回答