1

由于我在 PHP 上比我希望的更“菜鸟”,是否可以反转以下函数,例如:

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”而不是当前方式?

如果问这个问题的地方不对,我深表歉意

4

2 回答 2

1

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

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,您将无法确定您的功能中包含了什么。

于 2013-03-12T06:44:02.180 回答
-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;
}
于 2013-03-12T06:39:55.757 回答