決定的な UUID v5 を生成する
バージョン5の UUID は、名前空間 UUID と名前から SHA-1 で導出されます。同じ名前空間と同じ名前をハッシュすれば誰でもまったく同じ UUID が得られるため、ID を保存せずに再計算できます。
計算例
- 名前空間(UUID)
- DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
- 名前
- example.com
- 結果
- cfbff0d1-9375-5685-968c-48ce8b15ae17
- 名前空間(UUID)
- DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
- 名前
- Example.com
- 結果
- a1feb884-07f5-5a14-8edb-cb659a7fbadc
仕組み
- 名前空間の16バイトに名前の UTF-8 バイト列を連結して SHA-1 でハッシュします。ダイジェストの先頭16バイトにバージョン(5)とバリアントのビットを設定したものが UUID になります。
- RFC 9562 では、DNS 名、URL、ISO OID、X.500 識別名の名前空間があらかじめ定義されています。独自の UUID をプライベートな名前空間として使うこともできます。
- 名前はバイト単位で比較されます。大文字・小文字、空白、末尾のスラッシュでも結果が変わるため、事前に名前を正規化してください。出力は予測可能なので、UUID v5 を秘密値として使ってはいけません。
一度に1〜100個のUUIDを生成
DNS名前空間:6ba7b810-9dad-11d1-80b4-00c04fd430c8(デフォルト)
ハッシュする名前(例:ドメイン名、メールなど)
UUIDについて
UUID v1: タイムスタンプとUUIDを生成するコンピューターのMACアドレスを含む時刻ベースのUUID。UUIDがいつ作成されたかを知る必要がある場合に便利です。
UUID v4: ランダムに生成されたUUID。これは最も一般的に使用されるバージョンで、情報漏洩を最小限に抑えながら優れた一意性を提供します。
UUID v5: SHA-1ハッシュを使用した名前ベースのUUID。同じ名前空間と名前を指定すると、常に同じUUIDが得られます。決定論的なUUID生成に便利です。