基于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
位中的任何一位以获得正确的校验和。
如果您使用 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
位中的任何一位以获得正确的校验和。