基于Damm校验位的纠错

Error correction based on Damm 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 位中的任何一位以获得正确的校验和。