检查永不碰撞的数字加权

时间:2011-07-04 23:11:27

标签: checksum

我想使用模数为10的数字的加权和来实现一个简单的校验位。另外,作为校验位,我想“滥用”校验位来检测两个池中的哪一个(例如文章编号)和客户编号)一个数字属于。

根据Wikipedia,建议使用1,3,7和9作为重量,例如我可以选择:

Article Numbers: Weights 1, 3, 7, 1, 3, 7, ...
Customer Numbers: Weights 7, 9, 1, 7, 9, 1, ...

Number 1234 as an Article Number (1*1+2*3+3*7+4*1 mod 10 = 2): 12342
Number 1234 as a Customer Number (1*7+2*9+3*1+4*7 mod 10 = 6): 12346

问题是,有时这会为两个权重设置提供相同的校验位:

Number 1098 as an Article Number (1*1+0*3+9*7+8*1 mod 10 = 2): 10982
Number 1098 as a Customer Number (1*7+0*9+9*1+8*7 mod 10 = 2): 10982

我是否可以选择数字池的权重,对于任何给定的原始数字,确保两个池的校验位从不相同?

1 个答案:

答案 0 :(得分:0)

我怀疑这是可能的,虽然我必须进行详尽的检查才能确定。

您是否考虑过使用商品编号的偶数和客户编号的奇数?或者类似的东西?