16

我正在尝试对用于生成校验位的算法进行逆向工程。

数字长 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 类型系统。我可以访问大约 60 000 个号码。

我知道这个问题可能无法解决,更多的是学术问题。

4

1 回答 1

2

首先检查您的上下文:

如果上下文是信用卡、驾照、政府许可号码(不是 SSN),请考虑 Luhn 或 Mod 10。如果是其他行业,该行业是否有事实上的标准?如果不是,那么使用这些数字的系统的开发者是否也是拥有事实上的标准的行业的参与者?

如果没有必要,没有人愿意重新发明轮子。

如果这没有帮助,请记住:

不要假设您正在测试的密钥中的所有数字都用于到达校验位。可能只有 4 位或 8 位数字用于计算校验位(或任何其他组合)。也可能有一些外部前缀号码与其他数字一起使用以到达校验位。所以...用相同的校验位排列你所有的号码,看看有什么相似之处。您可以向它们添加一个数字,然后始终达到校验位吗?你能只测试前几位数字吗?最后几位数?每隔一个数字?

祝你好运。

于 2012-11-23T07:57:16.530 回答