PHPで一意(ユニーク)なIDを生成(uniqid())

ランダムで適当なIDを発行したい。「一意なIDを生成」なはずだけど「一意なID」ではないことがある。

作成日:2018-03-14, 更新日:2019-08-27

基本

現在のマイクロ秒を元にゴニョゴニョしてくれる。

echo uniqid();

※13桁で生成される。

マイクロ秒なので、同一の「一意なID」が生成されることがある。

言葉遊びというか疑問

「uniqid()」は「一意な ID を生成する」というんだけど・・・。
「一意なID」ってのは「重複しないID」って意味なんじゃないの?

それなのに「同じマイクロ秒で同じ ID が生成されてしまう可能性」があるってのはどういうコトなんだろう?

日本語訳がおかしいだけなのかな。

サンプル

まとめて実行した結果。

・第一引数 - 接頭詞をつける
・第二引数 - 別のエントロピーを (線形合同法を使用して) 追加。・・・「結果が一意になる可能性を高める」そうだ。

echo uniqid() 5aa8c3e89e40c
echo uniqid('') 5aa8c3e89e40c
echo uniqid('pre_') pre_5aa8c3e89e40c
echo uniqid(mt_rand()) 12977797845aa8c3e89e40c
echo uniqid(mt_rand(100,999)) 3645aa8c3e89e40c
echo uniqid('', true) 5aa8c3e89e40c9.69827703

単純にいくなら「uniqid(mt_rand(100,999))」だと桁数も揃って使い勝手が良さそうな気がする。
複数のホストで同時にID発行させるなら「uniqid('〇〇〇'.mt_rand(100,999))」としとけば、各ホストで違いも分かっていいんじゃないかな。