algorithm - 基于 Damm 校验位的纠错

标签 algorithm error-correction check-digit

如果您使用 Damm algorithm要生成校验位,如果代码不验证,是否有方法尝试纠正错误?

最佳答案

不,该算法只能用于检测错误,而不能用于纠正错误。

这可以用一个简单的例子来证明。假设您收到一个包含数字 9857 的号码。当您对该数字运行算法时,结果是 6。因此其中一位数字已更改。但哪一个呢?

通过暴力搜索,您可以确定原始数字可能是以下任意一种:

original                                                resulting
 number             error that occurred                  number
  1857      the first  digit got changed from 1 to 9      9857
  9157      the second digit got changed from 1 to 8      9857
  9827      the third  digit got changed from 2 to 5      9857
  9850      the fourth digit got changed from 0 to 7      9857

因此包含错误的号码并不能唯一标识原始号码。

一般来说,通过更改任何一位数字都可以获得正确的校验和。也就是说,如果您收到一个包含 N 位数字的数字,并且校验和不为 0,则可以更改 N 位数字中的任何一位来获得正确的数字校验和。

关于algorithm - 基于 Damm 校验位的纠错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50008115/

相关文章:

java - 在java中,排序时,当我有相同的值时,特定问题的解决方案是什么

java - 在 java 中使用正则表达式过滤日志

c++ - 丢包纠错码 (UDP)

algorithm - 具有两个权重的背包算法

algorithm - 使用 google maps API 距离矩阵来解决带有时间窗(TSPTW)或带有时间窗的车辆路径规划(VRPTW)的旅行商问题

c++ - schifra 库上的 RS-Code - 如何设置多项式?

c++ - 使用机器学习自动更正自定义句子的应用程序 : how to begin?

algorithm - Damm 算法的替代基表

java - Java 或 C++ 中的 API,用于读取机读区旅行证件(护照)代码

javascript - 如何根据 ISO 6346 计算校验位