我正在尝试对用于生成校验位的算法进行逆向工程。
数字长8位,最后一位是校验位。我有成千上万的有效数字来测试它。
我尝试过标准的Luhn,Verhoeff和modulo-10算法(对所有可能的权重进行强力检查),但找不到答案!
有可能计算出来吗?有什么想法吗?
以下是有效数字的一些示例:
1002784-5
1000514-7
1001602-8
1001255-2
1001707-1
1003355-5
1005579-1
1004535-0
1004273-1
1001695-9
1004565-9
1000541-9
1001291-1
1005866-1
1004352-7
编辑: 谢谢你们 - 遗憾的是我没有访问代码。该号码是一个税号,我需要能够验证该号码是否输入正确。从我的研究看起来大多数国家都使用非常标准的模10型系统。我可以访问大约6万个号码。
我理解这个问题可能无法解决,更多的是学术上的关注。
答案 0 :(得分:2)
首先检查你的背景:
如果上下文是信用卡,驾驶执照,政府许可证号码(不是SSN)认为Luhn或Mod 10.如果是其他行业,该行业是否有事实标准?如果没有,使用这些数字的系统的开发者是否也是具有事实上标准的行业中的参与者?
如果他们不需要,没有人喜欢重新发明轮子。
如果这有助于记住:
不要假设您要测试的密钥中的所有数字都用于到达校验位。可能只使用4位或8位数来计算校验位(或任何其他组合)。也可能有一些外部PREFIX编号与其他数字一起使用以到达校验位。所以...用相同的校验位排列所有数字,看看有什么相似之处。你能为他们添加一个数字,然后总是达到校验位吗?你能只测试前几位数字吗?最后几位数?每隔一个数字?
祝你好运。