【问题标题】:Given a number series, finding the Check Digit Algorithm...?给定一个数字序列,找到校验位算法...?
【发布时间】:2011-01-20 21:13:10
【问题描述】:

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

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

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

【问题讨论】:

  • 如果可能的话,您可能想发布一个样本(10 个左右)——它们可能是可识别的。

标签: algorithm numerical numeric digits numerical-computing


【解决方案1】:

不,不是在一般情况下,因为可能算法的数量远远超过你的想象。 250 个样本空间可能不足以进行正确的数值分析。

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

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

如果您知道该算法是从比“所有可能的算法”更小的子集中得出的,那么它可能是可能的。但算法可能只是故事的一半——即使使用相同的算法,乘数、求幂和环绕点也会发生变化。

【讨论】:

    【解决方案2】:

    paxdiablo 是正确的,如果不做任何其他假设(或仅拥有整个样本空间 - 然后您可以通过查找表定义算法),您无法猜测算法。

    但是,如果校验位是使用依赖于“数据位”的一些线性公式计算的(这是一种非常常见的情况,您可以在 wikipedia 文章中看到),给定足够的样本,您可以使用欧拉消去法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2017-02-23
    • 2021-07-30
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多