PR

【備忘録】UUID v4 と UUID v5 の違いと使用例について

development-01 Python
この記事は約4分で読めます。
記事内に広告が含まれています。

一意なランダム文字列を作成する際には、 UUID をよく使うと思います。

衝突しない(する可能性が限りなく低い)ランダム文字列を作成できる V4 を使うことが多いと思いますが、 V5 との違いも知っておきたいですね。

結論だけ知りたい人向け

UUID v4とv5の最大の違いは、v4が完全にランダムな値に基づき生成されるのに対し、v5は特定の入力値(名前と名前空間)に基づいて一貫して生成される点です。

スポンサーリンク

UUID のバージョン4 (v4) とは

UUID v4はランダムに生成されます。

このバージョンのUUIDは、128ビットの長さを持ち、その内の一部がバージョン情報(この場合は4)で、残りのビットがランダムに生成されるという仕組みです。

これにより、衝突(同じUUIDが再生成される確率)は非常に低くなるので、安心して一意な文字列として使用できます。

使用場面としては、このような時に使います。

  • 一意性が必要で、特定の識別子に依存しない場合
  • システム間で共有する必要がない一時的な識別子を生成する場合
  • 安全性が重要な場合(ランダム性により予測が困難)

サンプルコード(Python)です。

import uuid

# UUID v4の生成
uuid_v4 = uuid.uuid4()
print(f"UUID v4: {uuid_v4}")

私の自作ツールサイトでも生成できます。 ぜひご利用ください。

ランダムUUID生成 | DevEase(デブイーズ)
ランダムな UUID(V4)を生成します
スポンサーリンク

UUID のバージョン5(v5)とは

UUID v5は名前ベースのUUIDであり、SHA-1ハッシュアルゴリズムを使用して生成されます。

特定の「名前」(たとえばURLやユーザー名など)と「名前空間」(UUIDの形式で表される)を組み合わせて、常に同じ入力に対して同じUUIDを生成するのが特徴です。

ランダム文字列を生成するという点では v4 と同じですが、 v5 は、たとえばユーザID を入力とした場合は、毎回同じ UUID が生成されることになります。

使用場面としては、このような時に使います。

  • 特定のリソースを一意に識別する必要がある場合
  • 同じ入力値から一貫して同じUUIDを生成したい場合
  • システム間で共有する識別子を生成する場合

サンプルコード(Python)です。

import uuid

# 名前空間(DNSを例とする)
namespace = uuid.NAMESPACE_DNS

# 名前ベースでUUID v5を生成
uuid_v5 = uuid.uuid5(namespace, "example.com")
print(f"UUID v5: {uuid_v5}")

私の自作ツールサイトでも生成できます。 ぜひご利用ください。

UUID(V5)生成 | DevEase(デブイーズ)
NameSpace に基づき、UUID(V5)を生成します
スポンサーリンク

UUIDのバージョン5(v5)の名前空間の種類

UUID v5では、特定の「名前」と「名前空間」を組み合わせてUUIDを生成します。

名前空間はあらかじめ定義されたUUIDで、以下の種類があります。

  • DNS ドメイン名システムに基づく名前空間。 例えば、example.comのようなドメイン名を使用します。
  • URL 統一資源ロケータ(URL)に基づく名前空間。 例えば、http://example.com のようなURLを使用します。
  • OID オブジェクト識別子(Object Identifier)に基づく名前空間。
  • X.500 X.500識別子(通常はDN、すなわち識別名)に基づく名前空間。

これらの名前空間は、特定のタイプの識別子に基づいて一貫性のあるUUIDを生成するために使用されます。

サンプルコード(Python)です。

import uuid

# DNS名前空間でUUID v5を生成
uuid_v5_dns = uuid.uuid5(uuid.NAMESPACE_DNS, "example.com")
print(f"UUID v5 (DNS): {uuid_v5_dns}")

# URL名前空間でUUID v5を生成
uuid_v5_url = uuid.uuid5(uuid.NAMESPACE_URL, "http://example.com")
print(f"UUID v5 (URL): {uuid_v5_url}")
スポンサーリンク

参考


おわりに

UUID はどの言語でも使用する機会がありそうなので覚えておきたいですね。

コメント

タイトルとURLをコピーしました