48
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python3でUUIDを生成する

Posted at

##はじめに
PythonでUUIDを生成する方法です。
本記事はPython3.8を使用しています。

uuidというモジュールを使ってUUIDを生成するのですが、
Python3では標準ライブラリとしてバンドルされているので、
importしてすぐに使用できます。

##UUIDとは
UUID(Universally Unique Identifier)とは、世界で同じ値を持つことがない一意な識別子です。

##バージョン1

uuid.uuid1(node=None, clock_seq=None)

バージョン1は、時刻とMACアドレスを利用したUUIDで、
uuid1はホストID、シーケンス番号、現在時刻からUUIDを生成します。

uuid.uuid1()

引数なしでも利用可能です。
nodeがなければuuid.getnode()で、ハードウェアアドレスを取得しそれが適用されます。 

clock_seqは、シーケンス番号として使われ、
なければ14ビットのランダムなシーケンス番号が生成され適用されます。

uuid.getnode()
48 ビットの正の整数としてハードウェアアドレスを取得します。最初にこれを起動すると、別個のプログラムが立ち上がって非常に遅くなることがあります。もしハードウェアを取得する試みが全て失敗すると、ランダムな 48 ビットを、RFC 4122 で推奨されているように、マルチキャストビット (最初のオクテットの最下位ビット) を 1 に設定して使います。"ハードウェアアドレス" とはネットワークインターフェースの MAC アドレスを指します。複数のネットワークインターフェースを持つマシンの場合、全域管理されたMACアドレス (最初のオクテットの下位より2番目のビットが 設定されていない MACアドレス) が、他の個別管理アドレスよりも優先的に使用されます。この優先順序は保証されません。

コンピュータのネットワークアドレスを含むUUIDを生成するので注意が必要。

##バージョン3, バージョン5

uuid.uuid3(namespace, name)
uuid.uuid5(namespace, name)

バージョン3と5は、ドメイン名など何かしら一意な文字(バイト列)を用いたUUIDで、
uuid3はMD5ハッシュから、uuid5はSHA-1ハッシュからUUIDを生成します。

namespaceに名前空間識別子を指定して、それに沿った文字列を渡してUUIDを生成します。
namespaceでは以下を指定します。

uuid.NAMESPACE_DNS
name文字列に完全修飾ドメイン名を指定する。

uuid.NAMESPACE_URL
name文字列にURLを指定する。

uuid.NAMESPACE_OID
name文字列にISO OID(オブジェクト識別子)を指定する。

uuid.NAMESPACE_X500
name文字列にX.500 DNのDERまたはテキスト出力形式を指定する。

##バージョン4

uuid.uuid4()

バージョン4は乱数により生成されるUUIDで、
uuid4はOS固有の乱数でランダムなUUIDを生成します。

使用例

sample.py
import uuid

print(uuid.uuid1())
print(uuid.uuid3(uuid.NAMESPACE_URL, 'www.google.com'))
print(uuid.uuid5(uuid.NAMESPACE_URL, 'www.google.com'))
print(uuid.uuid4())

print(type(uuid.uuid1()))

実行結果

57aa71b8-7ead-11ec-932c-acde48001122
d407cf76-ed73-3579-959e-78c80e8d4579
c74a196f-f19d-5ea9-bffd-a2742432fc9c
b9f9b678-bce8-49a1-bca3-dbbc32259abf
<class 'uuid.UUID'>

##まとめ
ドキュメントにも書いてある通りなのですが、単純にUUIDを生成したいのであればuuid4を利用すると良いです。
ちなみにuuid2はRFC 4122で指定されておらず、このモジュールではサポートされていないようです。

##参考
https://docs.python.org/ja/3/library/uuid.html

48
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?