PHPでランダムで一意な値を取得する方法

こんにちは!ぐちです。

今回は社内の若手社員から質問があった内容についてご紹介します。

uniqid()

PHPではユニーク(一意)な値を計算する際にuniqidという関数を使うことで容易に取得することができます。定義は下記の通りです。

string uniqid ([ string $prefix [, bool $more_entropy ]] )

では使い方をご紹介します。

パラメータなし

マイクロ秒単位で変化するユニーク値を13桁の値で取得します。

echo uniqid();
// 実行結果の例:5638166ca0a66

プリフィックス指定

13桁のユニーク値の前に接頭語を付加することができます。

echo uniqid(“uniq_");
// 実行結果の例:uniq_563816ac1d47d

乱数をつける

マイクロ秒単位なので同じ値が算出される可能性もゼロではありません。そのために接頭語に乱数を付加することでその可能性を限りなくゼロにすることが可能です。ここではユニーク値の桁数を揃えるために乱数を1000〜9999の間にしています。

echo uniqid(rand(1000, 9999));
// 実行結果の例:1234563818aab60db

より安全に

より推測されにくい値にするために算出されたユニーク値をハッシュ化することもできます。

echo md5(uniqid(rand(1000, 9999)));
// 実行結果の例:baeb9adf5fcaca081cfccd6c85ebf466

Tips

上記の方法を利用することで自動採番するユーザーIDや一時IDなどに活用できますね。会員登録させるまでもないようなサービスを作るときに役立ちそうです。