对于将从图像中识别的数字,我有以下约束:
纠错方案目前基于校验和,因此第7位是前6位数之和的最后一位。
E.g。
123456 => 1234561
999999 => 9999994
472912 => 4729125
219274 => 2192745
如何确定此方案可以检测/纠正的错误的数量和类型,是否有一个方案可以提供更好的错误检测? (对于我的用例,错误检测比错误纠正更重要。)
答案 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的结果 程序,不是机械地生产的。相反,数字是 在机器的机身上以他们的置换顺序标记。