为短代码选择校验和以防止输入错误

时间:2012-06-27 14:44:06

标签: hash checksum

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

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

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

谢谢。

1 个答案:

答案 0 :(得分: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或12345的12543);
  • 所有或几乎所有的班次错误(整个字符串向左或向右移动);
  • 高比例的双重替换错误(同一字符串中的两个单独的单个替换错误,例如1234567的7234587);
  • 所有其他错误的比例很高。

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

例如,您可以使用ISO 7064 Mod 37,36,它可以使用0-9和A-Z(数据和校验字符)。有关算法的详细说明(如果您不想购买ISO),请参阅: