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

Ugo*_*éda 5 hash checksum

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

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

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

谢谢.

MV.*_*MV. 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);
  • 全部或几乎所有换档错误(整个弦向左或向右移动);
  • 高比例的双重替换错误(同一字符串中的两个单独的单个替换错误,例如1234567的7234587);
  • 所有其他错误的比例很高.

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

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