logo

Cum se generează UUID în Python

În acest tutorial, vom discuta cum să generați UUID-ul în Python folosind modulul uuid. Înainte de a aborda acest subiect, să înțelegem conceptul de bază al UUID.

Introducere

UUID este o abreviere a numelui identificatori unici universal cunoscut și sub numele de GUID, adică identificator unic global. Este un număr ID de 128 de biți pentru a defini în mod unic documentele, utilizatorii, resursele sau informațiile. Există diferite versiuni de UUID-uri; le vom discuta pe toate în secțiunea următoare.

  • UUID-ul este folosit pentru a defini identificatori unici în spațiu și timp. Spațiul și timpul înseamnă că odată ce UUID-ul este generat conform standardului, identificatorii nu pot fi duplicate resursele existente.
  • UUID-ul este cea mai potrivită opțiune atunci când este necesară unicitatea.
  • Acesta joacă un rol esențial în aplicațiile de criptare și hashing.

Când să utilizați UUID

Modulul UUID poate fi utilizat în următoarele scenarii.

În aplicația web -

  • UUID-ul ne ajută să gestionăm starea prin generare un ID de sesiune unic.
  • În general, folosim valorile de auto-incrementare pentru a genera ID-uri de utilizator. Este o abordare destul de simplă și ușor de ghicit. Cu toate acestea, UUID-urile sunt greu de ghicit deoarece nu sunt create consecutiv.

În sistemul de baze de date

obiectul java la json
  • Oferă un avantaj semnificativ în baza de date, deoarece UUID este independent de mediu. Înseamnă că putem crea un UUID pe orice mașină folosind orice aplicație.
  • Majoritatea aplicațiilor depind de serverul bazei de date pentru a genera cheia unică sau primară. UUID este o opțiune bună pentru a genera o cheie unică de bază de date, care ne ajută să schimbăm abordarea generării cheilor în baza de date.
  • UUID-ul este o valoare reală, nu o pseudo valoare ca un număr dintr-un tabel SQL.

Modulul Python uuid

Modulul Python uuid este implementat conform RFC 4122, un standard și Copyright © al societății internetului. Cu ajutorul modulului UUID Python, putem genera UUID-uri de diferite tipuri, cum ar fi UUID-uri de versiuni 1, 3, 4 și 5. Modulul Python acceptă următoarele versiuni de UUID.

    UUID1 -Acesta generează numărul unic folosind adresa MAC și componenta de timp curentă.UUID4 -Folosește generatoare de numere pseudo-aleatoare pentru a genera UUID-uri, iar astfel de tipuri de UUID-uri sunt bune de utilizat în scop de siguranță.UUID3 și UUID5 -Utilizează hashing criptografic și șiruri de text furnizate de aplicație pentru a genera UUID.

Generați UUID folosind modulul UUID Python

Să generăm UUID-urile diferitelor versiuni folosind modulul uuid Python.

Folosind uuid1() - Pentru a genera uuid, trebuie să importam modulul uuid și apoi să apelăm metoda uuid1(). Să înțelegem următorul exemplu.

Exemplu - 1

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

Ieșire:

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

Structura UUID

După cum putem vedea că există cinci componente în UUID-ul de mai sus și fiecare componentă are aceeași lungime. Structura UUID-ului este în formatul de „8-4-4-4-12”.

Reprezentarea șirului UUID este dată mai jos -

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

Să defalcăm câmpurile de mai sus ale UUID-urilor

    time_low -Este primii 32 de biți de id.time_mid -Sunt următorii 16 biți de id.time_high_and_version -Este următorii 16 biți de id.clock_seq_hi_variant :Este următorii 8 biți de id.clock_seq_low :Este următorii 8 biți de id.nod:Este ultimii 48 de biți de id.timp:Este un câmp component de timp al id.clock_seq :Este un număr de secvență de 14 biți.

Să înțelegem un alt exemplu de generare a UUID în diferite formate, cum ar fi octeți, int și hex.

butonul central în css

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

Ieșire:

 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 

Dezavantajele UUID1

UUID1 este asociat cu adresa MAC a computerului și, prin urmare, poate fi o amenințare pentru confidențialitate. Cu toate acestea, oferă unicitate completă.

Metoda 2: folosind uuid4()

Această metodă generează numere aleatorii cu garanția de a asigura confidențialitatea. Să înțelegem următorul exemplu.

Exemplu -

diferența dintre un gigaoctet și un megaoctet
 import uuid id = uuid.uuid4() # Id generated using uuid4() print ('The id generated using uuid4() : ',end='') print (id) 

Ieșire:

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

uuid1() vs uuid4

The uuid1() oferă asigurarea de a nu produce nicio coliziune. Putem crea duplicate ale UUID-urilor creând mai mult de 16384 uuid1 în mai puțin de 100ns. Nu oferă garanția de a asigura confidențialitatea. The uuid1() nu este recomandat dacă nu doriți să vedeți adresele MAC ale mașinii dvs.

Metoda uuid4() generează UUID aleatoriu folosind generatoarele de numere securizate generate criptografic. Acesta generează UUID-uri mai sigure. Este recomandat atunci când UUID-urile necesită generarea pe mașini separate.

UUID 3 și UUID 5 pentru a crea un UUID bazat pe nume

UUID-ul bazat pe nume înseamnă că putem genera UUID-uri folosind versiunea 3 sau 5 UUID.

Putem folosi nume și spații de nume pentru a crea o serie de UUID-uri unice. Versiunile 3 și 5 este hashing identificatorul de spațiu de nume cu un nume.

The uuid3() metoda generează un UUID care se bazează pe hash-ul MD5 al identificatorului de spațiu de nume și un șir. Pe de altă parte, metoda uuid5() generează UUID pe baza tehnicii de hashing SHA-1 a unui identificator de spațiu de nume.

Mai jos sunt identificatorii spațiilor de nume definiți de uuid3() sau uuid5().

    NAMESPACE_DNS -Reprezintă un nume de domeniu tradițional. De exemplu, https://javatpoint.com.NAMESPACE_URL -Reprezintă o adresă URL.NAMESPACE_OID -Acest spațiu de nume este specificat șirul ISO OID.NAMESPACE_X500 -Când este specificat acest spațiu de nume, șirul de nume este un DN X.500 în DER sau un format de ieșire text.

Să înțelegem următorul exemplu pentru a genera UUID3 și UUID5 folosind diferite nume de gazdă și spațiu de nume.

Exemplu -

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

Ieșire:

 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 

Exemplu - 2: Generați UUID 3 și UUID 5 folosind un spațiu de nume diferit

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

Ieșire:

 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 

Comportamentul uuid3 și uuid5

  • În ciuda faptului că același spațiu de nume și același nume sunt similare, UUID-urile sunt generate în momente diferite.
  • Două spații de nume diferite în același spațiu de nume sunt diferite, generează ID-uri unice.

Exemplu - 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')) 

Ieșire:

 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 

Cum se convertesc șirul în UUID și UUID în șir în Python?

The uuid.uuid1() metoda returnează instanța clasei UUID. Putem obține o reprezentare în șir a UUID folosind str() metodă. Formatul de șir corespunzător poate fi utilizat în comparație sau manipulare. Să înțelegem următorul exemplu.

Exemplu -

faceți în timp ce sunteți în java
 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) 

Ieșire:

 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 

Acum, vom crea UUID din String.

Uneori, obținem UUID-ul în format șir. Și aplicația noastră trebuie să o convertească în instanța clasei UUID pentru unele aplicații. Să înțelegem următorul exemplu pentru a converti UUID-ul formatat șir.

Exemplu -

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

Ieșire:

anulați ultima comitere
 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 

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

Ieșire:

 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 

Generați UUID-uri reproductibile

După cum am menționat mai devreme, UUID are diverse atribute. Putem folosi același UUID folosind oricare dintre atributele sale. Folosind modul uuid , putem genera la fel uuid oricând folosind valoarea semințelor. Valoarea seed poate fi folosită și pentru a genera același UUID. Să înțelegem ambele concepte.

Următoarele intrări pot fi utilizate pentru a crea instanța UUID.

  • Şir
  • octeți
  • Bytes_le
  • Câmpuri
  • int

Folosind oricare dintre valorile de mai sus, UUID-ul poate fi generat. Să vedem următorul exemplu în care folosim toate aceste valori ale aceluiași UUID.

Exemplu -

 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) 

Ieșire:

 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 

Reproduceți UUID cu semințe

După cum sugerează și numele, modulul Faker generează date false pentru noi. Am folosit modulul fals pentru a genera același UUID în mod repetat. Să înțelegem următorul exemplu.

Exemplu -

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

Ieșire:

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

Concluzie

În acest tutorial, am discutat în detalii despre modulul uuid și am înțeles cum putem genera diferitele UUID-uri. UUID-urile ne ajută să definim unicitatea în aplicație/bază de date și, de asemenea, ne ajută să definim identificatori pentru documente, gazde, aplicație, clienți și alte situații.