假设我有一系列由check digit组成的索引编号。如果我有足够的样本(说250个样本索引号),我有办法提取用于生成校验位的算法吗?鉴于数字系列,找到校验数字算法...?
我认为应该有一个程序化的方法,至少找到一组可能的算法。
更新:索引号的长度是8个数字,包括校验位。
假设我有一系列由check digit组成的索引编号。如果我有足够的样本(说250个样本索引号),我有办法提取用于生成校验位的算法吗?鉴于数字系列,找到校验数字算法...?
我认为应该有一个程序化的方法,至少找到一组可能的算法。
更新:索引号的长度是8个数字,包括校验位。
不,一般情况下,因为可能的算法的数量远远超过您的想象。 250的样本空间可能不足以进行适当的数值分析。
举一个极端的例子,假设您的样本全部为15位数字。你会而不是能够可靠地检测算法,如果它改变了那些大于15个字符的行为。
如果您想确定,您应该对检查数字有效性的代码进行反向工程(如果可用)。
如果您知道该算法是从一个比“每个可能的算法”更小的子集中绘制的,那么它可能是可能的。但算法可能只有一半 - 即使使用相同的算法,乘法器,求幂和换行点也会变化。
paxdiablo是正确的,你不能猜测算法没有做任何其他假设(或只是有整个样本空间 - 那么你可以通过查找表定义算法)。但是,如果校验位是使用一些依赖于“数据位数”的线性公式计算的(这是一个非常常见的情况,正如您在wikipedia文章中看到的那样),给定足够的样本可以使用Euler消除。
如果可能的话,您可能需要发布样本(10个左右) - 它们可能是可识别的。 – paxdiablo 2010-02-25 11:48:49