我只能提供一个带有五个额外数字的算法。注意:5 个原始数字确实是最坏的情况。使用 5 个额外的数字,您最多可以为 11 个原始数字执行 ECC。这类似于经典的 ECC 计算,但采用十进制:
原始(十进制)5位数字:o0,o1,o2,o3,o4
按以下方式将数字分配到位置 0..9:
0 1 2 3 4 5 6 7 8 9
o0 o1 o2 o3 o4
c4 c0 c1 c2 c3 <- will be calculated check digits
计算位置 1,2,4,8 的数字,如下所示:
c0, pos 1: (10 - (Sum positions 3,5,7,9)%10)%10
c1, pos 2: (10 - (Sum positions 3,6,7)%10)%10
c2, pos 4: (10 - (Sum positions 5,6,7)%10)%10
c3, pos 8: (10 - (Sum positions 9)%10)%10
在此计算之后,计算位置的数字:
c4, pos 0: (10 - (Sum positions 1..9)%10)%10
然后你可能会像这样重新洗牌:
o0o1o2o3o4-c0c1c2c3c4
要检查按以下顺序写入所有数字:
0 1 2 3 4 5 6 7 8 9
c4 c0 c1 o0 c2 o1 o2 o3 c3 o4
然后计算:
c0' = (Sum positions 1,3,5,7,9)%10
c1' = (Sum positions 2,3,6,7)%10
c2' = (Sum positions 4,5,6,7)%10
c3' = (Sum positions 8,9)%10
c4' = (Sum all positions)%10
如果 c0',c1',c2',c3',c4' 都为零,则没有错误。
如果有一些非零的 c[0..3]' 并且所有非零 c[0..3]' 的值为 c4',则一位数有错误。
您可以计算错误数字的位置并更正。(练习留给读者)。
如果 c[0..3]' 全部为零且只有 c4' 不等于零,则 c4 中有一位数错误。
如果 ac[0..3]' 不等于 0 并且具有与 c4' 不同的值,那么您(至少)有两位数的不可纠正的双重错误。