[PHP] 62進数変換カンタンコード

2015年3月9日

PHP プログラミング

整数値で10進数を使っているよりも、16進数を使ったほうが、データバイト数が節約できるが、これをもう少し拡張して、
数字[0-9] 大文字英字[A-Z] 小文字英字[a-z]
という風にすると、62進数ができあがる。 見た目的に暗号化しているようにも見えるので、便利に使える場面が多々あったので、下記にメモしておきます。

コード

/** * 文字数縮小の為に10進数を62進数に変更 **/ class HEX62{ // chara-value function chars(){ return array_merge( range(0,9), range('a','z'), range('A','Z') ); } // num->id function encode($n){ $char = $this->chars(); $cn = count($char); $str = ''; while ($n != 0) { $a1 = (int) ($n / $cn); $a2 = $n - ($a1*$cn); $str = $char[$a2].$str; $n = $a1; } return $str; } // id->num function decode($n){ $char = $this->chars(); $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; } }

使い方

$hex62 = new HEX62(); $num = 100000; //10進数を62進数に変換 $num2 = $hex62->encode($num); print_r($num2); //62進数を10進数に戻す $num3 = $hex62->decode($num2); print_r($num3);

注意点

62進数にした文字をファイル名にした場合、ファイル名をソートした際に、10進数と並びが変わってしまうので、順番が重要な場合は注意しよう。

多言語対応

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ