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進数に変換
無知って罪だ。
やっぱり反省します。