phpで10進数及び62進数の相互変換
数学力の無さが災いして、すごく手こずった。。。
ちょっと、自信がない気もするのでバグがあれば教えていただけると超感謝します。
10進数の数字をradixEncode()でアルファベットも含めた62進数に変換し、radixDecode()でもとに戻す。
極端に大きな数字では上手く動作しないが、これはphpのコンパイルオプションか何かで解決すべき問題のような気がする。
クラスにした方がいいような気もするけど。。。
<?php
function radixEncode($n){
$char = array_merge(
range(0,9),
range('a','z'),
range('A','Z')
);
$cn = count($char);
$str = '';
while ($n !== 0) {
$str = $char[$n % $cn].$str;
$n = (int) ($n / $cn);
}
return $str;
}
function radixDecode($n){
$char = array_merge(
range(0,9),
range('a','z'),
range('A','Z')
);
$cn = count($char);
for ($i=0; $i<$cn; $i++) {
$chars[$char[$i]] = $i;
}
$str = 0;
for ($i=0; $i<strlen($n); $i++) {
$str += $chars[substr($n, ($i+1)*-1, 1)] * pow($cn, $i);
}
return $str;
}
?>




最近のコメント