n進数に変換
2010/08/23 | PHPで遭遇した問題とその解決, PHPの基本
ユーザに一意な値を割り当てたいときがある。将来永劫にわたって同じ値は使いたくない。こんなとき一番便利なのはmicrotime関数でUNIXタイムスタンプ値を少数単位まで算出してやればだいたい問題なさそう。ただ、整数部分だけでも10桁あり、例えば少数第4位まで使用するにしても、合計で14桁の数値(文字列)を使わなければならない。これではちょっと長すぎて使いづらい。
そこで思いついたのだが、各桁で使用する数字が10種類(0、1、2、3・・・)しかないから14桁も必要になるわけで、使用する文字種を増やしてやればもっと小さな桁数で表現することができる。数字は10種類あるので、これにアルファベット26文字を足せば合計36種類になる。つまり10進数を36進数で表現すれば文字列の桁数を減らすことができる。
進数の変換をするための関数が用意されている。base_convert関数だ。
この関数を使って14桁の数値(10進数)を36進数に変換すると9文字の英数字に変換してくれる。5文字のお得となる訳だ。ただし、base_convert関数は、極端に大きな数を対象とする場合は誤差が生じるらしい。おおむね14桁の精度らしいが、OSに依存するようだ。
変換関数を作らなければならないと思っていたけど、とりあえずこれで使うことにする。