MENU
Python

【Python】ユニークなIDを生成する方法【UUID】

この記事では、PythonでUUIDを生成する方法を解説します。

UUID(Universally Unique Identifier)とは、世界中で重複しないIDのことを言います。将来的に重複や偶然の一致が起こらない値を使いたい場合に使用されます。

それでは、UUIDの生成方法を見ていきましょう!

UUIDの生成

UUIDを生成するにはuuidモジュールを使います。標準ライブラリなのでインポートするだけで使用可能です。

import uuid

UUIDには色々な生成方法が用意されています。UUIDのバージョンによってそれぞれ異なるので1つずつ確認していきましょう。

UUID: バージョン1

バージョン1のUUIDを生成するにはuuid.uuid1()関数を使います。こちらのIDは、ホストID、シーケンス番号、現在時刻から生成されます。

import uuid

uuid.uuid1(node=None, clock_seq=None)
uuid1()はコンピュータのネットワークアドレスを含むUUIDを生成するためにプライバシーを侵害するかもしれない点に注意

試しにUUIDを生成してIDと型を確認してみます。

import uuid

u = uuid.uuid1()
print(u)
print(type(u))

実行結果

cca225e8-19f3-11ec-9ed0-6476ba9c3936
<class 'uuid.UUID'>

UUID: バージョン4

バージョン4のUUIDを生成するにはuuid.uuid4()関数を使います。こちらのIDは乱数を使って完全にランダムに生成されます。

uuid.uuid4()

試しにUUIDを生成してIDと型を確認してみます。

import uuid

u = uuid.uuid4()
print(u)
print(type(u))

実行結果

440a10d9-ee48-4846-b882-57ee04adf8de
<class 'uuid.UUID'>

UUID: バージョン3と5

バージョン3と5のUUIDは名前空間識別子と名前で生成されます。バージョン3のUUIDはuuid.uuid3()、バージョン5のUUIDはuuid.uuid5()を使います。

バージョン3はMD5ハッシュから、バージョン5はSHA-1ハッシュからUUIDが生成されます。

バイト型のデータをハッシュ化する方法

import uuid

uuid.uuid3(namespace, name)

uuid.uuid5(namespace, name)

名前空間識別子(namespace)にはuuidモジュールに定義されている定数を指定します。

Link名前識別子 - uuid --- RFC 4122 に基づくUUID オブジェクト — Python ドキュメント

例えば、ドメイン名からUUIDを生成するには以下のようにします。

import uuid

dns = 'yumarublog.com'

u = uuid.uuid3(uuid.NAMESPACE_DNS, dns)
print(u)

u = uuid.uuid5(uuid.NAMESPACE_DNS, dns)
print(u)

実行結果

def133c0-c28a-3601-ba5b-8809edc5eef6
7fc47802-f599-55e3-b45c-3de18f534aa7

ドメイン名からユニークなIDを生成することができました。