U ovom vodiču raspravljat ćemo o tome kako generirati UUID u Pythonu pomoću modula uuid. Prije nego što zaronimo u ovu temu, shvatimo osnovni koncept UUID-a.
Uvod
UUID je skraćenica od naziva univerzalno jedinstveni identifikatori poznat i kao GUID, tj. Globalno jedinstveni identifikator. To je 128-bitni ID broj za jedinstveno definiranje dokumenata, korisnika, izvora ili informacija. Postoje razne verzije UUID-ova; o svima njima ćemo raspravljati u sljedećem odjeljku.
- UUID se koristi za definiranje jedinstvenih identifikatora u prostoru i vremenu. Prostor i vrijeme znače da nakon što se UUID generira prema standardu, identifikatori ne mogu biti duplicirani postojeći resursi.
- UUID je najprikladnija opcija kada je potrebna jedinstvenost.
- Igra bitnu ulogu u kriptografiji i primjeni raspršivanja.
Kada koristiti UUID
UUID modul može se koristiti u sljedećim scenarijima.
U web aplikaciji -
- UUID nam pomaže upravljati stanjem generiranjem jedinstveni ID sesije.
- Općenito, koristimo se automatskim povećanjem vrijednosti za generiranje ID-ova korisnika. To je prilično jednostavan pristup i lako ga je pogoditi. Međutim, UUID-ove je teško pogoditi jer se ne stvaraju uzastopno.
U sustavu baze podataka
java valjani identifikatori
- Omogućuje značajnu prednost u bazi podataka jer je UUID neovisan o okruženju. To znači da možemo stvoriti UUID na bilo kojem računalu koristeći bilo koju aplikaciju.
- Većina aplikacija ovisi o poslužitelju baze podataka za generiranje jedinstvenog ili primarnog ključa. UUID je dobra opcija za generiranje jedinstvenog ključa baze podataka koji nam pomaže promijeniti pristup generiranja ključa u bazi podataka.
- UUID je stvarna vrijednost, a ne pseudo vrijednost poput broja u SQL tablici.
Python uuid modul
Python uuid modul implementiran je prema RFC 4122, standardu i autorskim pravima © internetske zajednice. Uz pomoć Python UUID modula, možemo generirati UUID-ove u različitim vrstama kao što su UUID-ovi verzije 1, 3, 4 i 5. Python modul podržava sljedeće verzije UUID-a.
Generirajte UUID pomoću Python UUID modula
Generirajmo UUID-ove raznih verzija pomoću Python modula uuid.
Korištenje uuid1() - Da bismo generirali uuid, moramo uvesti modul uuid i zatim pozvati metodu uuid1(). Razumimo sljedeći primjer.
Primjer - 1
import uuid # Printing random id using uuid1() print ('The random generated uuid is : ', uuid.uuid1())
Izlaz:
The random id using uuid1() is : ab2d0fc0-7224-11ec-8ef2-b658b885fb3
Struktura UUID-a
Kao što vidimo da postoji pet komponenti u gornjem UUID-u i svaka komponenta ima istu duljinu. Struktura UUID-a je u formatu '8-4-4-4-12'.
Prikaz niza UUID-a dan je u nastavku -
UUID = time_low '-' time_mid '-'time_high_and_version ' 'clock_seq_and_reserved_And_clock_seq_low'-' Node.
Raščlanimo gornja polja UUID-ova
Razmotrimo još jedan primjer generiranja UUID-a u različitim formatima kao što su bajtovi, int i hex.
Primjer - 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)
Izlaz:
strint na int
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
Nedostaci UUID1
UUID1 povezan je s MAC adresom računala i stoga može biti prijetnja privatnosti. Međutim, pruža potpunu jedinstvenost.
Metoda 2: korištenje uuid4()
Ova metoda generira nasumične brojeve uz jamstvo zaštite privatnosti. Razumimo sljedeći primjer.
Primjer -
import uuid id = uuid.uuid4() # Id generated using uuid4() print ('The id generated using uuid4() : ',end='') print (id)
Izlaz:
The id generated using uuid4() : 53967be6-71e9-4ee9-9912-60d02d2d9b0a
uuid1() naspram uuid4
The uuid1() osigurava da neće doći do sudara. Možemo stvoriti duplikate UUID-ova stvaranjem više od 16384 uuid1 u manje od 100 ns. Ne daje jamstvo za sigurnost privatnosti. The uuid1() ne preporučuje se ako ne želite vidjeti MAC adrese svog stroja.
fibonaccijev kod java
Metoda uuid4() generira nasumični UUID pomoću kriptografski generiranih generatora sigurnih brojeva. Generira sigurnije UUID-ove. Preporučuje se kada UUID-ovi zahtijevaju generiranje na zasebnim strojevima.
UUID 3 i UUID 5 za stvaranje UUID-a temeljenog na nazivu
UUID temeljen na imenu znači da možemo generirati UUID-ove pomoću UUID-a verzije 3 ili 5.
Možemo koristiti imena i prostore imena za stvaranje niza jedinstvenih UUID-ova. Verzija 3 i 5 hashiraju identifikator prostora imena s imenom.
The uuid3() metoda generira UUID koji se temelji na MD5 hash identifikatora prostora imena i nizu. S druge strane, metoda uuid5() generira UUID na temelju SHA-1 tehnike raspršivanja identifikatora prostora naziva.
Ispod su identifikatori prostora imena definirani uuid3() ili uuid5().
Razumimo sljedeći primjer za generiranje UUID3 i UUID5 koristeći različita imena hostova i prostore imena.
Primjer -
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()
Izlaz:
usporedba nizova u Javi
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
Primjer - 2: Generirajte UUID 3 i UUID 5 korištenjem drugog prostora naziva
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()
Izlaz:
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
Ponašanje uuid3 i uuid5
- Unatoč tome što su isti prostor imena i isto ime slični, UUID-ovi su generirani u različito vrijeme.
- Dva različita prostora imena u istom prostoru imena su različita, generira jedinstvene ID-ove.
Primjer - 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'))
Izlaz:
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
Kako pretvoriti niz u UUID i UUID u niz u Pythonu?
The uuid.uuid1() metoda vraća instancu UUID klase. Možemo dobiti prikaz niza UUID-a pomoću str() metoda. Odgovarajući format niza može se koristiti za usporedbu ili manipulaciju. Razumimo sljedeći primjer.
Primjer -
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)
Izlaz:
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
Sada ćemo kreirati UUID iz niza.
Ponekad dobivamo UUID u formatu niza. A naša ga aplikacija treba pretvoriti u instancu klase UUID za neke aplikacije. Razumimo sljedeći primjer za pretvorbu UUID-a u obliku niza.
Primjer -
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()
Izlaz:
što je ymail
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
Primjer - 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)
Izlaz:
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
Generirajte UUID-ove koji se mogu reproducirati
Kao što smo ranije spomenuli, UUID ima različite atribute. Možemo koristiti isti UUID koristeći bilo koji od njegovih atributa. Koristiti uuid modul , možemo generirati isto uuid bilo kada koristeći početnu vrijednost. Početna vrijednost se također može koristiti za generiranje istog UUID-a. Razumimo oba koncepta.
Sljedeći unosi mogu se koristiti za stvaranje instance UUID-a.
- Niz
- Bajtovi
- Bytes_le
- Polja
- int
Koristeći bilo koju od gornjih vrijednosti, UUID se može generirati. Pogledajmo sljedeći primjer gdje koristimo sve ove vrijednosti istog UUID-a.
Primjer -
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)
Izlaz:
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
Reproducirajte UUID sa sjemenom
Kao što mu ime govori, modul Faker za nas generira lažne podatke. Koristili smo modul faker za više puta generiranje istog UUID-a. Razumimo sljedeći primjer.
Primjer -
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())
Izlaz:
b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 b1d0cac0-d50d-11e8-b57b-ccaf789d94a0
Zaključak
U ovom vodiču detaljno smo razgovarali o modulu uuid i razumjeli kako možemo generirati različite UUID-ove. UUID-ovi nam pomažu da definiramo jedinstvenost u aplikaciji/bazi podataka i također nam pomažu da definiramo identifikatore za dokumente, hostove, aplikacije, klijente i druge situacije.