【问题标题】:Choosing a checksum for short code to prevent typing errors为短代码选择校验和以防止输入错误
【发布时间】:2012-06-27 14:44:06
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 您链接的帖子是关于为机器创建的长数据块生成校验和。在这里,发帖人要求提供单个验证字符/数字,这对人工输入(不同的校验和系列)很有用。

标签: hash checksum


【解决方案1】:

您可以尝试 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 和 A-Z(数据和校验字符)。算法的详细描述(如果您不想购买 ISO)可以在以下位置找到:

【讨论】:

  • 您,先生,成就了我的一天!谢谢,似乎它非常适合我的问题。
猜你喜欢
  • 1970-01-01
  • 2013-11-13
  • 2011-06-16
  • 2017-05-07
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多