如何确定6 + 1位的最大纠错/检测方法?

时间:2012-12-29 19:02:52

标签: algorithm error-correction

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

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

纠错方案目前基于校验和,因此第7位是前6位数之和的最后一位。

E.g。

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

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

1 个答案:

答案 0 :(得分:2)

你可以尝试Luhn,它比你描述的要复杂得多,但它会满足你的要求。

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

  

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

     

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

     

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

     

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

     

在   算法出现在美国专利中,用于手持式机械装置   用于计算校验和。因此需要相反   简单。该装置通过机械方式获得mod 10总和。该   替换数字,即double和reduce的结果   程序,不是机械地生产的。相反,数字是   在机器的机身上以他们的置换顺序标记。