ランダムな UUID v4 を生成する
バージョン4の UUID は128ビットの値で、そのうち122ビットが暗号論的に安全な乱数源から得られます。残りの6ビットはバージョンと RFC バリアントを表すため、すべての UUID v4 は3番目のグループが 4 で始まります。
計算例
- 入力したランダムバイト
- 9d 41 7c 02 e8 5b 13 f6 2a 7e c1 94 06 d3 b8 5f
- 結果
- 9d417c02-e85b-43f6-aa7e-c19406d3b85f
| 生成した UUID の数 | 重複が1つ以上発生する確率 |
|---|---|
| 10⁶ | ≈ 9.4 × 10⁻²⁶ |
| 10⁹ | ≈ 9.4 × 10⁻²⁰ |
| 10¹² | ≈ 9.4 × 10⁻¹⁴ |
| 10¹⁵ | ≈ 9.4 × 10⁻⁸ |
重複確率が50%になる UUID の数: ≈ 2.71 × 10¹⁸
仕組み
- ジェネレーターは16バイトを安全な乱数で埋め、バイト6の上位ニブルを 4(バージョン)に、バイト8の上位2ビットを 10(バリアント)に設定します。そのため3番目のグループは 4 で、4番目のグループは 8、9、a、b のいずれかで始まります。
- 取り得る値は2¹²²通りあり、誕生日問題の近似式 p ≈ 1 − e^(−n²/2¹²³) で、n 個のランダム UUID に重複が1つ以上含まれる確率を求められます。
- UUID v4 にはタイムスタンプやハードウェア情報が含まれません。識別子として使い、パスワードや認証用の秘密値としては使わないでください。
一度に1〜100個のUUIDを生成
UUIDについて
UUID v1: タイムスタンプとUUIDを生成するコンピューターのMACアドレスを含む時刻ベースのUUID。UUIDがいつ作成されたかを知る必要がある場合に便利です。
UUID v4: ランダムに生成されたUUID。これは最も一般的に使用されるバージョンで、情報漏洩を最小限に抑えながら優れた一意性を提供します。
UUID v5: SHA-1ハッシュを使用した名前ベースのUUID。同じ名前空間と名前を指定すると、常に同じUUIDが得られます。決定論的なUUID生成に便利です。