《PHP8上級試験対策》uniqid()関数で生成されるユニークIDの挙動

  • URLをコピーしました!

はじめに

PHPでユニークIDを生成する際に使う uniqid() 関数。時刻ベースでIDを作る仕組みや、$more_entropy オプションを指定した場合の挙動を正しく理解しておくことは、PHP8上級試験でも重要です。本記事では具体例を交えて、正しい使い方と挙動を解説します。

キーワード:uniqid / ユニークID / more_entropy / 時刻ベース / ランダム識別子

目次

uniqid() の基本

uniqid(string $prefix = "", bool $more_entropy = false): string
  • 目的:ユニークなID(識別子)を生成する
  • 引数
    • $prefix:IDの先頭に付加する文字列
    • $more_entropy
      • false(デフォルト):13文字程度の時刻ベースID
      • true:ドットで区切られたランダム部分が追加され、衝突確率が低くなる
  • 戻り値:文字列

実行例

<?php
declare(strict_types=1);
error_reporting(-1);

var_dump(uniqid(more_entropy:true));
var_dump(uniqid(more_entropy:true));
var_dump(uniqid(more_entropy:true));

出力例(実行時刻により変化)

string(23) "68ecf3c9c19b31.79236268"
string(23) "68ecf3c9c19cf6.23450046"
string(23) "68ecf3c9c19d33.23964886"
  • ドット前:マイクロ秒ベースの時刻
  • ドット後:ランダム性を加えた部分($more_entropy = true の効果)

💡 注意点:uniqid()絶対に衝突しないIDではないため、高速で連続生成するとまれに同じIDになることがあります。衝突回避が絶対必要な場合は random_bytes() なども検討してください。

図解イメージ

uniqid(more_entropy: true)
┌─────────────┬────────────┐
│ 時刻ベース    │ ランダム部分 │
└─────────────┴────────────┘
68ecf3c9c19b31.79236268

まとめ

  • uniqid()時刻ベースのユニークIDを生成する
  • $more_entropy = true でランダム性を追加可能
  • 実行例の出力は仕様通りで正しい
  • 絶対衝突を避けたい場合は random_bytes() との併用が有効

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次