0

https://stackoverflow.com/a/9848014/2704706から取得した次の関数をスケーリングして、数値を 11 文字の文字列にエンコード/デコードすることは可能ですか?

function lfsr($x) {
    return ($x >> 1) ^ (($x&1) ? 0xe10000 : 0);
}
function to_4($x) {
    for($i=0;$i<24;$i++)
        $x = lfsr($x);
    $str = pack("CCC", $x >> 16, ($x >> 8) & 0xff, $x & 0xff);
    return base64_encode($str);
}

function rev_lfsr($x) {
    $bit = $x & 0x800000;
    $x = $x ^ ($bit ? 0xe10000 : 0);
    return ($x << 1) + ($bit ? 1 : 0);
}
function from_4($str) {
    $str = base64_decode($str);
    $x = unpack("C*", $str);
    $x = $x[1]*65536 + $x[2] * 256 + $x[3];
    for($i=0;$i<24;$i++)
        $x = rev_lfsr($x);
    return $x;
}

for($i=0; $i<256; $i++) {
    $enc = to_4($i);
    echo $enc . " " . from_4($enc) . "\n";
}

私の最終的な目標は、これらのメソッドを使用して、YouTube の URL の v $_GET 変数に含まれるビデオ ID と同様の方法でエンコードされた ID を持つ URL を形成することです。つまり、http://www.youtube.com/watch? v の RArlg6HeZZM です。 =RArlg6HeZZM .

ありがとうございます。

4

1 に答える 1