logo

Ako vygenerovať UUID v Pythone

V tomto návode budeme diskutovať o tom, ako vygenerovať UUID v Pythone pomocou modulu uuid. Predtým, ako sa ponoríme do tejto témy, pochopme základný koncept UUID.

Úvod

UUID je skratka názvu univerzálne jedinečné identifikátory tiež známy ako GUID, t.j. globálne jedinečný identifikátor. Ide o 128-bitové ID číslo na jedinečnú definíciu dokumentov, používateľov, zdrojov alebo informácií. Existujú rôzne verzie UUID; o všetkých budeme diskutovať v nasledujúcej časti.

  • UUID sa používa na definovanie jedinečných identifikátorov v priestore a čase. Priestor a čas znamenajú, že akonáhle je UUID vygenerované podľa štandardu, identifikátory nemôžu byť duplikované existujúce zdroje.
  • UUID je najvhodnejšou možnosťou, keď sa vyžaduje jedinečnosť.
  • Hrá zásadnú úlohu v kryptografii a hašovaní aplikácií.

Kedy použiť UUID

Modul UUID možno použiť v nasledujúcich scenároch.

Vo webovej aplikácii -

  • UUID nám pomáha spravovať stav generovaním jedinečné ID relácie.
  • Vo všeobecnosti používame hodnoty automatického prírastku na generovanie ID používateľov. Je to celkom priamy prístup a je ľahké ho uhádnuť. UUID je však ťažké uhádnuť, pretože sa nevytvárajú postupne.

V databázovom systéme

tojson java
  • Poskytuje významnú výhodu v databáze, pretože UUID je nezávislé od prostredia. Znamená to, že môžeme vytvoriť UUID na akomkoľvek počítači pomocou akejkoľvek aplikácie.
  • Väčšina aplikácií závisí od databázového servera, ktorý vygeneruje jedinečný alebo primárny kľúč. UUID je dobrá možnosť na generovanie jedinečného databázového kľúča, ktorý nám pomáha zmeniť prístup generovania kľúčov v databáze.
  • UUID je skutočná hodnota, nie pseudo hodnota ako číslo v tabuľke SQL.

Modul Python uuid

Modul Python uuid je implementovaný podľa RFC 4122, štandardu a Copyright © internetovej spoločnosti. Pomocou modulu Python UUID môžeme generovať UUID v rôznych typoch, ako sú UUID verzie 1, 3, 4 a 5. Modul Python podporuje nasledujúce verzie UUID.

    UUID1 -Generuje jedinečné číslo pomocou MAC adresy a komponentu aktuálneho času.UUID4 -Na generovanie UUID používa generátory pseudonáhodných čísel a takéto typy UUID je dobré použiť na bezpečnostné účely.UUID3 a UUID5 -Na generovanie UUID používa kryptografické hashovanie a textové reťazce poskytnuté aplikáciou.

Generujte UUID pomocou modulu Python UUID

Poďme vygenerovať UUID rôznych verzií pomocou modulu Python uuid.

Použitie uuid1() - Aby sme vygenerovali uuid, musíme importovať modul uuid a potom zavolať metódu uuid1(). Poďme pochopiť nasledujúci príklad.

Príklad - 1

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

Výkon:

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

Štruktúra UUID

Ako vidíme, vo vyššie uvedenom UUID je päť komponentov a každý komponent má rovnakú dĺžku. Štruktúra UUID je vo formáte '8-4-4-4-12'.

Reprezentácia reťazca UUID je uvedená nižšie -

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

Poďme rozobrať vyššie uvedené polia UUID

    time_low -Je to prvých 32 bitov ID.time_mid -Je to ďalších 16 bitov ID.time_high_and_version -Je to ďalších 16 bitov ID.clock_seq_hi_variant :Je to ďalších 8 bitov ID.clock_seq_low :Je to ďalších 8 bitov ID.uzol:Je to posledných 48 bitov ID.čas:Ide o pole časovej zložky id.clock_seq :Je to 14-bitové poradové číslo.

Poďme pochopiť ďalší príklad generovania UUID v rôznych formátoch, ako sú bajty, int a hex.

Prí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ýkon:

 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 priradený k MAC adrese počítača, a preto môže predstavovať hrozbu pre súkromie. Poskytuje však úplnú jedinečnosť.

Metóda 2: pomocou uuid4()

veľkosť písma latex

Táto metóda generuje náhodné čísla so zárukou zabezpečenia súkromia. Poďme pochopiť nasledujúci príklad.

Príklad -

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

Výkon:

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

uuid1() vs uuid4

The uuid1() poskytuje záruku, že nedôjde ku kolízii. Môžeme vytvoriť duplikáty UUID vytvorením viac ako 16 384 uuid1 za menej ako 100 ns. Neposkytuje záruku zabezpečenia súkromia. The uuid1() sa neodporúča, ak nechcete, aby sa zobrazovali adresy MAC vášho zariadenia.

Metóda uuid4() generuje náhodné UUID pomocou kryptograficky generovaných generátorov bezpečných čísel. Generuje bezpečnejšie UUID. Odporúča sa, keď UUID vyžadujú generovanie na samostatných počítačoch.

UUID 3 a UUID 5 na vytvorenie UUID založeného na názve

UUID založené na názve znamená, že môžeme generovať UUID pomocou verzie 3 alebo 5 UUID.

Názvy a menné priestory môžeme použiť na vytvorenie série jedinečných UUID. Verzia 3 a 5 hashuje identifikátor menného priestoru s názvom.

nastaviť oddeľovač java

The uuid3() metóda generuje UUID, ktoré je založené na MD5 hash identifikátora menného priestoru a reťazca. Na druhej strane metóda uuid5() generuje UUID na základe hašovacej techniky SHA-1 identifikátora priestoru názvov.

Nižšie sú uvedené identifikátory menných priestorov definované pomocou uuid3() alebo uuid5().

    NAMESPACE_DNS -Predstavuje tradičný názov domény. Napríklad https://javatpoint.com.NAMESPACE_URL -Predstavuje URL.NAMESPACE_OID -Tento priestor názvov je špecifikovaný reťazcom ISO OID.NAMESPACE_X500 -Keď je zadaný tento priestor názvov, reťazec názvu je X.500 DN vo formáte DER alebo vo formáte textového výstupu.

Poďme pochopiť nasledujúci príklad na generovanie UUID3 a UUID5 pomocou rôznych názvov hostiteľa a priestoru názvov.

Prí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ýkon:

 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 

Príklad – 2: Vygenerujte UUID 3 a UUID 5 pomocou iného menného priestoru

funkcie java8
 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ýkon:

 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 

Správanie uuid3 a uuid5

  • Napriek tomu, že rovnaký menný priestor a rovnaký názov sú podobné, UUID generované v rôznych časoch.
  • Dva rôzne menné priestory v rovnakom mennom priestore sú odlišné, generujú jedinečné ID.

Prí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ýkon:

 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 

Ako previesť reťazec na UUID a UUID na reťazec v Pythone?

The uuid.uuid1() metóda vráti inštanciu triedy UUID. Reťazcovú reprezentáciu UUID môžeme získať pomocou str() metóda. Zodpovedajúci formát reťazca môže byť použitý pri porovnávaní alebo manipulácii. Poďme pochopiť nasledujúci príklad.

Prí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ýkon:

 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 

Teraz vytvoríme UUID z String.

Niekedy dostaneme UUID vo formáte reťazca. A naša aplikácia ho potrebuje pre niektoré aplikácie previesť do inštancie triedy UUID. Poďme pochopiť nasledujúci príklad na konverziu UUID vo formáte reťazca.

Prí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ýkon:

regresné testovanie v testovaní softvéru
 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 

Prí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ýkon:

 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 reprodukovateľné UUID

Ako sme už spomenuli, UUID má rôzne atribúty. Môžeme použiť rovnaký UUID pomocou ktoréhokoľvek z jeho atribútov. Pomocou modul uuid , môžeme vygenerovať to isté uuid kedykoľvek pomocou hodnoty semena. Počiatočná hodnota sa môže použiť aj na generovanie rovnakého UUID. Poďme pochopiť oba pojmy.

Nasledujúce vstupy možno použiť na vytvorenie inštancie UUID.

  • Reťazec
  • bajtov
  • Bytes_le
  • Polia
  • int

Pomocou ktorejkoľvek z vyššie uvedených hodnôt možno vygenerovať UUID. Pozrime sa na nasledujúci príklad, kde používame všetky tieto hodnoty rovnakého UUID.

Prí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ýkon:

 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 pomocou semena

Ako už názov napovedá, modul Faker nám generuje falošné dáta. Použili sme falošný modul na opakované generovanie rovnakého UUID. Poďme pochopiť nasledujúci príklad.

Prí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ýkon:

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

Záver

V tomto návode sme podrobne rozobrali modul uuid a pochopili sme, ako môžeme generovať rôzne identifikátory UUID. UUID nám pomáhajú definovať jedinečnosť v aplikácii/databáze a tiež pomáhajú definovať identifikátory pre dokumenty, hostiteľov, aplikácie, klientov a iné situácie.