逆向工程校验位算法

Nei*_*eil 15 algorithm reverse-engineering check-digit

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

数字长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
Run Code Online (Sandbox Code Playgroud)

编辑:谢谢你们 - 遗憾的是我没有访问代码.该号码是一个税号,我需要能够验证该号码是否输入正确.从我的研究看起来大多数国家都使用非常标准的模10型系统.我可以访问大约6万个号码.

我知道问题可能无法解决,更多的是学术上的关注.

小智 2

首先检查您的上下文:

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

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

如果这没有帮助记住:

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

祝你好运。

  • 如果您允许加权和的权重为零,并为其添加一个常数,那么至少 mod 10 算法已经过测试(使用强力)并且不起作用。 (2认同)