36進数 1

36進数を新しいサービスで使おうと思って
作ってたわけです。
いや 思いついたら面白くなってしまったというオチなんですが。

こんなかんじで。

function decodeDec36($decimal='') {
    if (preg_match('/^[0-9a-z]+$/',$decimal)) {
        $stack = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

        $dec35 = 0;
        $len = strlen($decimal);
        for ($i=1; $i<=$len; $i++) {
            $tmpDec = array_search(substr($decimal,-$i,1),$stack,true);
            $dec35 += (int) $tmpDec * pow(36,$i - 1);
        }
        return $dec35;
    } else {
        return false;
    }
}

function encodeDec36($number='') {
    if (is_numeric($number)) {
        $stack = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

        $enc35 = '';
        $tempEnc = array();
        while (($floor = floor((int) $number / 36)) != 0) {
            $tempEnc[] = $number % 36;
            $number = $floor;
        }
        $tempEnc[] = $number;

        $tempEnc = array_reverse($tempEnc);
        foreach ($tempEnc as $k=>$v) {
            $enc35 .= $stack[$v];
        }
        return $enc35;
    } else {
        return false;
    }
}

反省はしてない。

と勢いで作っていたらふと javascript の toString(36) を思い出した。

あれってPHPでねえのとおもったらあった・・・

$encoded = base_convert($number,10,36); //10進数の$numberを36進数に変換

無知って罪だ。
やっぱり反省します。

One comment on “36進数

  1. Pingback: Amazon や Twipic のかっこいい URL ってどうしてるの? | ウェブル

Leave a Reply