找到PHP函数的反转

时间:2013-03-12 06:36:21

标签: php

因为我更喜欢PHP中的“noob”而不是我希望的,例如,是否可以反转以下函数:

public function baseID($resourceid){
    $rid = $resourceid;
    $version = 0;

    while ($rid > 16777216){
        $version++;
        if ($version == 1){
            //the constant applied to all items
            $rid -= 1342177280;
        }elseif ($version == 2){
            //the value added to the first updated version
            $rid -= 50331648;
        }else{
            //the value added on all subsequent versions
            $rid -= 16777216;
        }
    }

    //$returnable = array('baseID'=>$rid,'version'=>$version);
    return $rid;
}

是否可以输入“baseID”并返回“resourceID”而不是当前的方式?

如果这是提出这样问题的错误地方,我道歉

2 个答案:

答案 0 :(得分:1)

不是真的。您的函数为以下形式的所有rid返回相同的值:

5 * 2^28 + (3 + n) * 2^24

n是正整数。

>>> baseID(5 * 2**28 + (3 + 1) * 2**24)
    16777216
>>> baseID(5 * 2**28 + (3 + 2) * 2**24)
    16777216
>>> baseID(5 * 2**28 + (3 + 3) * 2**24)
    16777216

所以只给16777216,你就无法确定你的功能是什么。

答案 1 :(得分:-2)

此功能仅适用于有限范围,但在某一时刻,资源ID将开始返回相同的结果。

public function resourceID($baseid){
    $bid = $baseid;
    $version = 0;

    while ($bid <= 16777216){
        ++$version;

        if ($version === 1){
            $bid += 1342177280;
        } elseif ($version === 2){
            $bid += 50331648;
        } else {
            $bid += 16777216;
        }
    }

    return $bid;
}