如果使用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位来得到正确的校验和。

07-27 19:49