我正在尝试反向工程一个算法,用于生成一个支票数字。
数字长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万个号码。
我知道这个问题是不可能解决的,这是学术界比较关注的问题。
最佳答案
首先检查上下文:
如果上下文是信用卡,驾驶执照,政府许可证号码(不是SSN)认为鲁恩或国防部10。如果是其他行业,这个行业是否有一个事实上的标准?如果不是,那么使用这些数字的系统开发人员是否也是一个具有事实标准的行业的参与者?
如果没有必要的话,没有人愿意重新发明轮子。
如果这不能帮助你记住:
不要假设您正在测试的密钥中的所有数字都用于到达校验位。可能只有4位或8位数字被用来计算校验位(或任何其他组合)。也可能有一些外部前缀号与其他数字一起使用,以到达校验位。所以…把你所有的数字和同一个校验数字排成一行,看看有什么相似之处。你能给他们加一个数字然后一直到校验位吗?你能只测试前几个数字吗?最后几个数字?每隔一个数字?
祝你好运。
关于algorithm - 对校验位算法进行逆向工程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13495456/