ホーム > 未分類 > phpで10進数及び62進数の相互変換

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;
}

?>
カテゴリー: 未分類 タグ:
  1. コメントはまだありません。
  1. トラックバックはまだありません。