2010-02-25 91 views
2

假设我有一系列由check digit组成的索引编号。如果我有足够的样本(说250个样本索引号),我有办法提取用于生成校验位的算法吗?鉴于数字系列,找到校验数字算法...?

我认为应该有一个程序化的方法,至少找到一组可能的算法。

更新:索引号的长度是8个数字,包括校验位。

+0

如果可能的话,您可能需要发布样本(10个左右) - 它们可能是可识别的。 – paxdiablo 2010-02-25 11:48:49

回答

4

不,一般情况下,因为可能的算法的数量远远超过您的想象。 250的样本空间可能不足以进行适当的数值分析。

举一个极端的例子,假设您的样本全部为15位数字。你会而不是能够可靠地检测算法,如果它改变了那些大于15个字符的行为。

如果您想确定,您应该对检查数字有效性的代码进行反向工程(如果可用)。

如果您知道该算法是从一个比“每个可能的算法”更小的子集中绘制的,那么它可能是可能的。但算法可能只有一半 - 即使使用相同的算法,乘法器,求幂和换行点也会变化。

0

paxdiablo是正确的,你不能猜测算法没有做任何其他假设(或只是有整个样本空间 - 那么你可以通过查找表定义算法)。但是,如果校验位是使用一些依赖于“数据位数”的线性公式计算的(这是一个非常常见的情况,正如您在wikipedia文章中看到的那样),给定足够的样本可以使用Euler消除。

+0

我想知道@ r0u1i能否引用“欧拉消除”的来源?快速谷歌搜索确实确定了这样的算法? – WesR 2017-10-18 20:54:01

+0

@韦斯,欧拉,高斯,同样的东西:) http://euler.mcs.utulsa.edu/~class_diaz/cs2503/Spring99/lab7/node8.html – r0u1i 2017-10-19 00:19:05