logo

Python で UUID を生成する方法

このチュートリアルでは、uuid モジュールを使用して Python で UUID を生成する方法について説明します。このトピックに入る前に、UUID の基本概念を理解しましょう。

導入

UUIDは、の略称です。 普遍的に一意の識別子 GUID (Globally Unique Identifier) とも呼ばれます。これは、ドキュメント、ユーザー、リソース、または情報を一意に定義する 128 ビット長の ID 番号です。 UUID にはさまざまなバージョンがあります。それらすべてについては次のセクションで説明します。

  • UUID は、空間と時間を超えて一意の識別子を定義するために使用されます。空間と時間は、標準に従って UUID が生成されると、識別子を既存のリソースと重複させることができないことを意味します。
  • 一意性が必要な場合は、UUID が最適なオプションです。
  • これは、暗号化とハッシュのアプリケーションにおいて重要な役割を果たします。

UUID を使用する場合

UUID モジュールは次のシナリオで使用できます。

Web アプリケーションの場合 -

  • UUID は、生成することで状態を管理するのに役立ちます。 一意のセッション ID。
  • 通常、自動インクリメント値を使用してユーザー ID を生成します。これは非常に単純なアプローチであり、推測しやすいです。ただし、UUID は連続して作成されないため、推測するのが困難です。

データベースシステム内

Python // 演算子
  • UUID は環境に依存しないため、データベースに大きな利点があります。これは、任意のアプリケーションを使用して、任意のマシン上で UUID を作成できることを意味します。
  • ほとんどのアプリケーションは、データベース サーバーに依存して一意キーまたは主キーを生成します。 UUID は、データベース内のキー生成アプローチを変更するのに役立つ、一意のデータベース キーを生成するための優れたオプションです。
  • UUID は実際の値であり、SQL テーブル内の数値のような疑似値ではありません。

Python uuid モジュール

Python uuid モジュールは、インターネット社会の標準および Copyright © である RFC 4122 に従って実装されています。 Python UUID モジュールを利用すると、バージョン 1、3、4、5 などのさまざまなタイプの UUID を生成できます。 Python モジュールは、次のバージョンの UUID をサポートします。

    UUID1 -MAC アドレスと現在の時刻コンポーネントを使用して一意の番号を生成します。UUID4 -疑似乱数ジェネレーターを使用して UUID を生成します。このようなタイプの UUID は安全のために使用すると良いでしょう。UUID3 および UUID5 -暗号化ハッシュとアプリケーションが提供するテキスト文字列を使用して UUID を生成します。

Python UUID モジュールを使用して UUID を生成する

Python uuid モジュールを使用して、さまざまなバージョンの UUID を生成してみましょう。

uuid1() の使用 - uuid を生成するには、uuid モジュールをインポートしてから、uuid1() メソッドを呼び出す必要があります。次の例を理解してみましょう。

例-1

 import uuid # Printing random id using uuid1() print ('The random generated uuid is : ', uuid.uuid1()) 

出力:

 The random id using uuid1() is : ab2d0fc0-7224-11ec-8ef2-b658b885fb3 

UUIDの構造

上記の UUID には 5 つのコンポーネントがあり、各コンポーネントの長さは同じであることがわかります。 UUID の構造は次の形式です。 「8-4-4-4-12」。

UUID 文字列表現を以下に示します。

Linuxのキーボードショートカット
 UUID = time_low '-' time_mid '-'time_high_and_version ' 'clock_seq_and_reserved_And_clock_seq_low'-' Node. 

上記の UUID フィールドを詳しく見てみましょう

    時間の低さ -ID の最初の 32 ビットです。time_mid -次の 16 ビットの ID です。time_high_and_version -それは次の 16 ビットの ID です。Clock_seq_hi_variant :ID の次の 8 ビットです。クロックシーケンスロー:ID の次の 8 ビットです。ノード:ID の最後の 48 ビットです。時間 :idの時間要素フィールドです。クロックシーケンス:14 ビットのシーケンス番号です。

bytes、int、hex などのさまざまな形式で UUID を生成する別の例を理解してみましょう。

例 - 2:

 import uuid id = uuid.uuid1() # Representations of uuid1() print ('The byte Representations of uuid1() are : ') print (repr(id.bytes)) print ('Integer Value Representation: ',end='') print(id.int) print ('hex Value Representation : ',end='') print (id.hex) print('
') # The components of uuid1() print ('The components of uuid1() are : ') print ('Version : ',end='') print (id.version) print ('Variant : ',end='') print (id.variant) print('
') # Fields of uuid1() print ('The Fields of uuid1() are : ') print ('Fields : ',end='') print (id.fields) print('UUID.fields :', id.fields) print('Prining each field seperately') print('UUID.time_low : ', id.time_low) print('UUID.time_mid : ', id.time_mid) print('UUID.time_hi_version : ', id.time_hi_version) print('UUID.clock_seq_hi_variant: ', id.clock_seq_hi_variant) print('UUID.clock_seq_low : ', id.clock_seq_low) print('UUID.node : ', id.node) print('UUID.time : ', id.time) print('UUID.clock_seq : ', id.clock_seq) print('UUID.SafeUUID : ', id.is_safe) print('
') # The time Component of uuid1() print ('The time Component of uuid1() is : ') print ('Time component : ',end='') print (id.node) 

出力:

 The byte Representations of uuid1() are : b'xb9xeaxb88sx0ex11xecxbfvx86xa0;xe4`x12' int Representation : 247125913120858544596828814248071421970 hex Representation : b9eab838730e11ecbf7686a03be46012 The Components of uuid1() are : Version : 1 Variant : specified in RFC 4122 The Fields of uuid1() are : Fields : (3119167544, 29454, 4588, 191, 118, 148022757711890) The time Component of uuid1() is : Time component : 148022757711890 UUID.time_mid : 29460 UUID.time_hi_version : 4588 UUID.clock_seq_hi_variant: 186 UUID.clock_seq_low : 100 UUID.node : 90979746151630 UUID.time : 138612218401246920 UUID.clock_seq : 14948 UUID.SafeUUID : SafeUUID.unsafe 

UUID1の欠点

UUID1 はコンピュータの MAC アドレスに関連付けられているため、プライバシーに対する脅威となる可能性があります。ただし、完全な一意性が提供されます。

方法 2: uuid4() を使用する

この方法では、プライバシーを確​​保しながら乱数を生成します。次の例を理解してみましょう。

例 -

 import uuid id = uuid.uuid4() # Id generated using uuid4() print ('The id generated using uuid4() : ',end='') print (id) 

出力:

 The id generated using uuid4() : 53967be6-71e9-4ee9-9912-60d02d2d9b0a 

uuid1() と uuid4 の比較

uuid1() 衝突が発生しないことを保証します。 100ns 未満で 16384 を超える uuid1 を作成することで、UUID の複製を作成できます。プライバシーの確保を保証するものではありません。の uuid1() マシンの MAC アドレスを表示したくない場合には、これはお勧めできません。

uuid4() メソッドは、暗号化して生成された安全な番号ジェネレーターを使用して、ランダムな UUID を生成します。より安全な UUID が生成されます。 UUID を別のマシンで生成する必要がある場合に推奨されます。

名前ベースの UUID を作成するための UUID 3 および UUID 5

名前ベースの UUID は、バージョン 3 または 5 の UUID を使用して UUID を生成できることを意味します。

名前と名前空間を使用して、一連の一意の UUID を作成できます。バージョン 3 および 5 は、名前空間識別子を名前でハッシュします。

uuid3() このメソッドは、名前空間識別子の MD5 ハッシュと文字列に基づいて UUID を生成します。一方、uuid5() メソッドは、名前空間識別子の SHA-1 ハッシュ手法に基づいて UUID を生成します。

以下は、uuid3() または uuid5() によって定義される名前空間識別子です。

C++のモジュロとは何ですか
    NAMESPACE_DNS -これは従来のドメイン名を表します。たとえば、https://javatpoint.com。NAMESPACE_URL -URLを表します。NAMESPACE_OID -この名前空間は文字列 ISO OID で指定されます。NAMESPACE_X500 -この名前空間が指定されている場合、名前文字列は DER の X.500 DN またはテキスト出力形式になります。

さまざまなホスト名と名前空間を使用して UUID3 と UUID5 を生成する次の例を理解しましょう。

例 -

 import uuid host_names = ['javatpoint.com', 'tutorialandexample.com'] for host in host_names: print('Generate uuid 3 version using name as',host,' and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, host)) print('Generate uuid 5 version using name as', host, ' and namespace as uuid.NAMESPACE_DNS'), print(uuid.uuid5(uuid.NAMESPACE_DNS, host)) print() 

出力:

 Generate uuid 3 version using name as javatpoint.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb Generate uuid 5 version using name as javatpoint.com and namespace as uuid.NAMESPACE_DNS 0fc2d4dd-7194-5200-8050-f0ca1dd04b3d Generate uuid 3 version using name as tutorialandexample.com and namespace as uuid.NAMESPACE_DNS 6f6fe445-1c4c-3874-854e-c79f617effe5 Generate uuid 5 version using name as tutorialandexample.com and namespace as uuid.NAMESPACE_DNS 781c3cc9-4965-5fdc-9c40-89bb0ea8ec0d 

例 - 2: 異なる名前空間を使用して UUID 3 と UUID 5 を生成する

 import uuid name_spaces = [uuid.NAMESPACE_DNS, uuid.NAMESPACE_URL, uuid.NAMESPACE_OID, uuid.NAMESPACE_X500] host_name = 'pynative.com' print('Generate uuid using namespace') for namespace in name_spaces: print('uuid 3 is', uuid.uuid3(namespace, host_name)) print('uuid 5 is', uuid.uuid5(namespace, host_name)) print() 

出力:

おっと、Java の概念
 Generate uuid using namespace uuid 3 is 6ddc8513-dc7b-3b37-b21b-a1ca9440fe14 uuid 5 is 8d6a1314-170a-559c-afe7-b68d1d7ee9ac uuid 3 is 5dcfef3e-bcc9-38bc-b989-4a7516a05974 uuid 5 is 3a4a6c31-8d6a-5583-8497-d2ed90b1f13a uuid 3 is 84d9730f-330f-3634-9542-4acfcdcd6c60 uuid 5 is 899f3d4b-6095-5ee6-9805-68e0c51dcb39 uuid 3 is b140fa3b-983a-3efe-85ef-92f07d5e09a0 uuid 5 is 73b723ef-5c5e-5eb4-8fcc-aabb5c4e7803 

uuid3 と uuid5 の動作

  • 同じ名前空間と同じ名前は似ていますが、UUID は異なる時点で生成されます。
  • 同じ名前空間内の 2 つの異なる名前空間は異なり、一意の ID が生成されます。

例 - 3

 import uuid print('Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, 'javatpoint.com')) print('Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, 'javatpoint.com')) 

出力:

 Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb 

Pythonで文字列をUUIDに変換し、UUIDを文字列に変換するにはどうすればよいですか?

uuid.uuid1() メソッドは UUID クラスのインスタンスを返します。以下を使用して UUID の文字列表現を取得できます。 str() 方法。対応する文字列形式は、比較または操作に使用できます。次の例を理解してみましょう。

例 -

 import uuid UUID1_VAL = uuid.uuid1() print('The version 1 UUID is ', UUID1_VAL) # convert a UUID to a string of hex digits in standard form print('The version 1 UUID in String format', str(UUID1_VAL)) # Use replace() method to remove dashes from string uuidString = str(UUID1).replace('-', '') print('Version 1 UUID in String removing dashes', uuidString) 

出力:

 The version 1 UUID is cdca7930-7488-11ec-a0c4-4984d2946471 UUID of version 1 in String format cdca7930-7488-11ec-a0c4-4984d2946471 Version 1 UUID in String format cdca7930-7488-11ec-a0c4-4984d2946471 Version 1 UUID in String removing dashes cdca7930748811eca0c44984d2946471 

次に、文字列から UUID を作成します。

場合によっては、UUID を文字列形式で取得することがあります。また、アプリケーションによっては、UUID クラス インスタンスでそれを変換する必要があります。文字列形式の UUID を変換する次の例を理解しましょう。

例 -

 import uuid import uuid UUIDStrings = ['{c7c9de0a-d676-11e8-8d62-ccaf789d94a0}', '018c168c-d509-11e8-b096-ccaf789d94a0', 'urn:uuid:e5e9394c-daed-498e-b9f3-69228b44fbfa'] for string in UUIDStrings: # make a UUID from a string of hex digits (braces and hyphens ignored) myUUID = uuid.UUID(string) print('My UUID is', myUUID) print('My UUID time component is', myUUID.time) print() 

出力:

np.ヒストグラム
 UUID is c7c9de0a-d676-11e8-8d62-ccaf789d94a0 Time component is 137595594281180682 UUID is 018c168c-d509-11e8-b096-ccaf789d94a0 Time component is 137594023292180108 UUID is e5e9394c-daed-498e-b9f3-69228b44fbfa Time component is 688728508333635916 

例 - 2:

 import uuid def display(message, l): print(message) for v in l: print(v) print() string_uuids = [ 'urn:uuid:f2f84497-b3bf-493a-bba9-7c68e6def80b', '{417a5ebb-01f7-4ed5-aeac-3d56cd5037b0}', '2115773a-5bf1-11dd-ab48-001ec200d9e0', ] display('string UUID', string_uuids) uuids = [ uuid.UUID(s) for s in string_uuids ] display('converted to uuids', uuids) uuids.sort() display('sorted value', uuids) 

出力:

 string UUID urn:uuid:f2f84497-b3bf-493a-bba9-7c68e6def80b {417a5ebb-01f7-4ed5-aeac-3d56cd5037b0} 2115773a-5bf1-11dd-ab48-001ec200d9e0 converted to uuids f2f84497-b3bf-493a-bba9-7c68e6def80b 417a5ebb-01f7-4ed5-aeac-3d56cd5037b0 2115773a-5bf1-11dd-ab48-001ec200d9e0 sorted value 2115773a-5bf1-11dd-ab48-001ec200d9e0 417a5ebb-01f7-4ed5-aeac-3d56cd5037b0 f2f84497-b3bf-493a-bba9-7c68e6def80b 

再現可能な UUID を生成する

前述したように、UUID にはさまざまな属性があります。任意の属性を使用して同じ UUID を使用できます。を使用して、 uuidモジュール 、同じものを生成できます uuid シード値を使用していつでも。シード値を使用して同じ UUID を生成することもできます。両方の概念を理解しましょう。

次の入力を使用して UUID インスタンスを作成できます。

  • バイト
  • バイトル
  • 田畑
  • 整数

上記の値のいずれかを使用して、UUID を生成できます。同じ UUID のこれらすべての値を使用する次の例を見てみましょう。

例 -

 import uuid print('Generating UUID from int') UUID_x = uuid.UUID(int=236357465324988601727440242910546465952) print('UUID is', UUID_x) print('UUID from URN') UUID_x1 = uuid.UUID('urn:uuid:b1d0cac0-d50d-11e8-b57b-ccaf789d94a0') print('UUID is', UUID_x1) print('UUID from bytes') UUID_x2 = uuid.UUID(bytes=b'xb1xd0xcaxc0xd5
x11xe8xb5{xccxafxx9dx94xa0') print('UUID is', UUID_x2) print('UUID from bytes_len') UUID_x3 = uuid.UUID(bytes_le=b'xc0xcaxd0xb1
xd5xe8x11xb5{xccxafxx9dx94xa0') print('UUID is', UUID_x3) print('UUID from fields') UUID_x4 = uuid.UUID(fields=(2983250624, 54541, 4584, 181, 123, 225054014936224)) print('UUID is', UUID_x4) 

出力:

 Generating UUID from int UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from URN UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from bytes UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from bytes_len UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from fields UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 

シードを使用して UUID を再現する

その名前が示すように、Faker モジュールは偽のデータを生成します。私たちは、faker モジュールを使用して同じ UUID を繰り返し生成しました。次の例を理解してみましょう。

例 -

 import uuid from faker import Faker fake_obj = Faker() fake_obj.seed(8754) print(faker_obj.uuid4()) fake_obj.seed(8754) print(fake_obj.uuid4()) 

出力:

 b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 

結論

このチュートリアルでは、uuid モジュールについて詳しく説明し、さまざまな UUID を生成する方法を理解しました。 UUID は、アプリケーション/データベースの一意性を定義するのに役立ち、ドキュメント、ホスト、アプリケーション、クライアント、その他の状況の識別子を定義するのにも役立ちます。