logo

Jak vygenerovat UUID v Pythonu

V tomto tutoriálu probereme, jak vygenerovat UUID v Pythonu pomocí modulu uuid. Než se ponoříme do tohoto tématu, pojďme pochopit základní koncept UUID.

Úvod

UUID je zkratka názvu univerzálně jedinečné identifikátory také známý jako GUID, tedy globálně jedinečný identifikátor. Jedná se o 128bitové ID číslo, které jednoznačně definuje dokumenty, uživatele, zdroje nebo informace. Existují různé verze UUID; o všem budeme diskutovat v nadcházející sekci.

  • UUID se používá k definování jedinečných identifikátorů v prostoru a čase. Prostor a čas znamenají, že jakmile je UUID vygenerováno podle standardu, identifikátory nemohou být duplikovány existujícími zdroji.
  • UUID je nejvhodnější volbou, když je vyžadována jedinečnost.
  • Hraje zásadní roli v kryptografii a hašovací aplikaci.

Kdy použít UUID

Modul UUID lze použít v následujících scénářích.

Ve webové aplikaci -

  • UUID nám pomáhá spravovat stav generováním jedinečné ID relace.
  • Obecně používáme hodnoty automatického přírůstku ke generování ID uživatelů. Je to docela přímočarý přístup a lze jej snadno uhodnout. UUID je však obtížné uhodnout, protože nejsou vytvářeny po sobě.

V databázovém systému

powershell menší nebo rovno
  • Poskytuje významnou výhodu v databázi, protože UUID je nezávislé na prostředí. To znamená, že můžeme vytvořit UUID na jakémkoli počítači pomocí jakékoli aplikace.
  • Většina aplikací závisí na databázovém serveru, aby vygeneroval jedinečný nebo primární klíč. UUID je dobrá volba pro generování jedinečného databázového klíče, který nám pomáhá změnit přístup ke generování klíčů v databázi.
  • UUID je skutečná hodnota, nikoli pseudo hodnota jako číslo v tabulce SQL.

Modul Python uuid

Modul Python uuid je implementován podle RFC 4122, standardu a Copyright © internetové společnosti. S pomocí modulu Python UUID můžeme generovat UUID v různých typech, jako jsou UUID verze 1, 3, 4 a 5. Modul Python podporuje následující verze UUID.

    UUID1 –Generuje jedinečné číslo pomocí MAC adresy a složky aktuálního času.UUID4 -Ke generování UUID používá generátory pseudonáhodných čísel a takové typy UUID je dobré používat z bezpečnostních důvodů.UUID3 a UUID5 -Ke generování UUID používá kryptografické hashování a textové řetězce poskytované aplikací.

Vygenerujte UUID pomocí modulu Python UUID

Pojďme vygenerovat UUID různých verzí pomocí modulu uuid Pythonu.

Použití uuid1() - Abychom vygenerovali uuid, musíme importovat modul uuid a poté zavolat metodu uuid1(). Pojďme pochopit následující příklad.

Příklad - 1

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

Výstup:

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

Struktura UUID

Jak vidíme, ve výše uvedeném UUID je pět komponent a každá komponenta má stejnou délku. Struktura UUID je ve formátu '8-4-4-4-12'.

Reprezentace řetězce UUID je uvedena níže -

 UUID = time_low '-' time_mid '-'time_high_and_version ' 'clock_seq_and_reserved_And_clock_seq_low'-' Node. 

Pojďme rozebrat výše uvedená pole UUID

    time_low -Je to prvních 32 bitů ID.time_mid -Je to dalších 16 bitů id.time_high_and_version -Je to dalších 16 bitů id.clock_seq_hi_variant :Je to dalších 8 bitů id.clock_seq_low :Je to dalších 8 bitů id.uzel:Je to posledních 48 bitů ID.čas :Je to pole časové složky id.clock_seq :Jedná se o 14bitové pořadové číslo.

Pojďme pochopit další příklad generování UUID v různých formátech, jako jsou bajty, int a hex.

Příklad – 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) 

Výstup:

 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 

Nevýhody UUID1

UUID1 je spojen s MAC adresou počítače, a proto může představovat hrozbu pro soukromí. Poskytuje však naprostou jedinečnost.

string.format v jazyce Java

Metoda 2: pomocí uuid4()

Tato metoda generuje náhodná čísla se zárukou ochrany soukromí. Pojďme pochopit následující příklad.

Příklad -

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

Výstup:

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

uuid1() vs uuid4

The uuid1() poskytuje záruku, že nedojde ke kolizi. Můžeme vytvořit duplikáty UUID vytvořením více než 16384 uuid1 za méně než 100 ns. Neposkytuje záruku zabezpečení soukromí. The uuid1() se nedoporučuje, pokud nechcete vidět MAC adresy vašeho zařízení.

Metoda uuid4() generuje náhodné UUID pomocí kryptograficky generovaných generátorů bezpečných čísel. Generuje bezpečnější UUID. Doporučuje se, když UUID vyžadují generování na samostatných počítačích.

UUID 3 a UUID 5 pro vytvoření UUID založeného na názvu

UUID založené na názvu znamená, že můžeme generovat UUID pomocí UUID verze 3 nebo 5.

rozdíl tygra a lva

Můžeme použít jména a jmenné prostory k vytvoření řady jedinečných UUID. Verze 3 a 5 hashuje identifikátor jmenného prostoru s názvem.

The uuid3() metoda generuje UUID, které je založeno na MD5 hash identifikátoru jmenného prostoru a řetězce. Na druhou stranu metoda uuid5() generuje UUID na základě hašovací techniky SHA-1 identifikátoru jmenného prostoru.

Níže jsou uvedeny identifikátory jmenných prostorů definované pomocí uuid3() nebo uuid5().

    NAMESPACE_DNS -Představuje tradiční doménové jméno. Například https://javatpoint.com.NAMESPACE_URL –Představuje URL.NAMESPACE_OID –Tento jmenný prostor je určen řetězcem ISO OID.NAMESPACE_X500 –Je-li zadán tento obor názvů, je řetězec názvu X.500 DN v DER nebo textovém výstupním formátu.

Pojďme pochopit následující příklad pro generování UUID3 a UUID5 pomocí různých názvů hostitelů a jmenných prostorů.

Příklad -

 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() 

Výstup:

 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 

Příklad - 2: Vygenerujte UUID 3 a UUID 5 pomocí jiného jmenného prostoru

 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() 

Výstup:

 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 

Chování uuid3 a uuid5

  • Přestože stejný jmenný prostor a stejný název jsou podobné, UUID generované v různých časech.
  • Dva různé jmenné prostory ve stejném jmenném prostoru se liší, generují jedinečná ID.

Příklad - 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')) 

Výstup:

nejhezčí úsměv na světě
 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 

Jak převést řetězec na UUID a UUID na řetězec v Pythonu?

The uuid.uuid1() metoda vrací instanci třídy UUID. Můžeme získat řetězcovou reprezentaci UUID pomocí str() metoda. Odpovídající formát řetězce lze použít při porovnávání nebo manipulaci. Pojďme pochopit následující příklad.

Příklad -

 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) 

Výstup:

 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 

Nyní vytvoříme UUID z String.

Někdy získáme UUID ve formátu řetězce. A naše aplikace jej potřebuje pro některé aplikace převést do instance třídy UUID. Pojďme pochopit následující příklad pro převod UUID ve formátu řetězce.

Příklad -

 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() 

Výstup:

javascriptový spánek
 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 

Příklad – 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) 

Výstup:

 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 

Generujte reprodukovatelné UUID

Jak jsme již zmínili, UUID má různé atributy. Můžeme použít stejný UUID pomocí kteréhokoli z jeho atributů. Za použití modul uuid , můžeme vygenerovat totéž uuid kdykoli pomocí hodnoty osiva. Seed hodnotu lze také použít ke generování stejného UUID. Pojďme pochopit oba pojmy.

Následující vstupy lze použít k vytvoření instance UUID.

  • Tětiva
  • Bajtů
  • Bytes_le
  • Pole
  • int

Pomocí kterékoli z výše uvedených hodnot lze vygenerovat UUID. Podívejme se na následující příklad, kde použijeme všechny tyto hodnoty stejného UUID.

Příklad -

 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) 

Výstup:

 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 

Reprodukujte UUID se semenem

Jak jeho název napovídá, modul Faker nám generuje falešná data. Použili jsme modul faker ke generování stejného UUID opakovaně. Pojďme pochopit následující příklad.

Příklad -

 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()) 

Výstup:

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

Závěr

V tomto tutoriálu jsme podrobně probrali modul uuid a pochopili, jak můžeme generovat různá UUID. UUID nám pomáhají definovat jedinečnost v aplikaci/databázi a také pomáhají definovat identifikátory pro dokumenty, hostitele, aplikace, klienty a další situace.