基于Damm校验位的纠错

时间:2018-04-24 17:59:27

标签: algorithm error-correction check-digit

如果您使用Damm algorithm生成校验位,是否有一种方法可以在代码无效时尝试更正错误?

1 个答案:

答案 0 :(得分:1)

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

这可以通过一个简单的例子来证明。我们假设您收到一个包含数字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数字以获得正确的校验和。