给出一个数字系列,找到校验位算法......?

时间:2010-02-25 06:22:10

标签: algorithm numerical numeric digits numerical-computing

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

我认为至少应该有一种编程方法来找到一组可能的算法。

更新:索引号的长度为8位,包括校验位。

2 个答案:

答案 0 :(得分:4)

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

举一个极端的例子,假设您的样本都是15位数。如果算法改变了超过15个字符的行为,你 能够可靠地检测算法。

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

如果您知道算法是从比“每个可能的算法”更小的子集中提取的,那么它可能是可能的。但算法可能只是故事的一半 - 即使使用相同的算法,乘法器,取幂和环绕点也会发生变化。

答案 1 :(得分:0)

paxdiablo是正确的,你不能在没有做任何其他假设的情况下猜测算法(或者只是拥有整个样本空间 - 然后你可以通过查找表来定义算法)。

但是,如果使用某些线性公式计算校验位,这取决于“数据数字”(这是一个非常常见的情况,正如维基百科文章中所见),给定足够的样本,您可以使用Euler消除。