2

对于将从图像中识别的数字,我有以下限制:

  • 6位数据
  • 1位纠错
  • 前 6 位数字不能更改(它们必须是人类可读的)
  • 校验位必须保持为数字

目前的纠错方案是基于校验和,使得第7位是前6位和的最后一位。

例如

123456 => 1234561
999999 => 9999994
472912 => 4729125
219274 => 2192745

如何确定此方案可以检测/纠正的错误数量和类型,是否有方案可以提供更好的错误检测?(对于我的用例,错误检测比纠错更重要)。

4

1 回答 1

3

您可以尝试Luhn,它比您描述的要复杂一些,但它会满足您的要求。

来自维基百科的复制粘贴:

Luhn 算法将检测任何单个数字的错误,以及几乎所有相邻数字的换位。但是,它不会检测两位数序列 09 到 90 的转置(反之亦然)。它将检测 10 个可能的孪生错误中的 7 个(它不会检测到 22 ↔ 55、33 ↔ 66 或 44 ↔ 77)。

其他更复杂的校验位算法(例如 Verhoeff 算法和 Damm 算法)可以检测到更多的转录错误。Luhn mod N 算法是支持非数字字符串的扩展。

因为该算法以从右到左的方式对数字进行操作,并且零位仅在它们导致位置偏移时才会影响结果,因此在数字字符串的开头填充零不会影响计算。因此,填充到特定位数的系统(例如,通过将 1234 转换为 0001234)可以在填充之前或之后执行 Luhn 验证并获得相同的结果。

将 0 添加到奇数长度的数字使您可以从左到右而不是从右到左处理数字,从而将奇数位加倍。

该算法出现在用于计算校验和的手持式机械设备的美国专利中。因此要求它相当简单。该设备通过机械方式获取了 mod 10 的总和。替换数字,即 double 和 reduce 过程的结果,不是机械产生的。相反,这些数字是在机器主体上按排列顺序标记的。

于 2012-12-29T19:07:09.213 回答