メインコンテンツに移動

決定的な 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 を秘密値として使ってはいけません。
UUIDバージョン

一度に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生成に便利です。

その他の UUID ガイド