logo

Hvordan generere UUID i Python

I denne opplæringen vil vi diskutere hvordan du genererer UUID i Python ved å bruke uuid-modulen. Før vi dykker inn i dette emnet, la oss forstå det grunnleggende konseptet til UUID.

Introduksjon

UUID er en forkortelse for universelt unike identifikatorer også kjent som GUID, dvs. Globally Unique Identifier. Det er et 128 bit langt ID-nummer for å unikt definere dokumenter, brukere, ressurser eller informasjon. Det finnes ulike versjoner av UUIDer; vi vil diskutere dem alle i den kommende delen.

  • UUID brukes til å definere unike identifikatorer på tvers av rom og tid. Plass og tid betyr at når UUID er generert i henhold til standarden, kan identifikatorer ikke duplisere eksisterende ressurser.
  • UUID er det best egnede alternativet når det kreves unikhet.
  • Det spiller en viktig rolle i kryptografi og hashing-applikasjoner.

Når du skal bruke UUID

UUID-modulen kan brukes i følgende scenarier.

I nettapplikasjon -

  • UUID hjelper oss å administrere staten ved å generere en unik økt-ID.
  • Vanligvis bruker vi verdiene for automatisk økning for å generere bruker-IDer. Det er en ganske grei tilnærming og lett å gjette. UUID er imidlertid vanskelig å gjette fordi de ikke opprettes fortløpende.

I databasesystemet

Logg av Google-konto på Android
  • Det gir en betydelig fordel i databasen fordi UUID er miljøuavhengig. Det betyr at vi kan opprette en UUID på hvilken som helst maskin ved å bruke en hvilken som helst applikasjon.
  • De fleste applikasjoner er avhengige av databaseserveren for å generere den unike eller primærnøkkelen. UUID er et godt alternativ for å generere en unik databasenøkkel som hjelper oss med å endre nøkkelgenereringstilnærmingen i databasen.
  • UUID er en reell verdi, ikke en pseudoverdi som et tall i en SQL-tabell.

Python uuid-modul

Python uuid-modulen er implementert i henhold til RFC 4122, en standard og Copyright © fra internettsamfunnet. Ved hjelp av Python UUID-modulen kan vi generere UUIDer i ulike typer som 1, 3, 4 og 5 versjoner UUID. Python-modulen støtter følgende versjoner av UUID.

    UUID1 -Den genererer det unike nummeret ved å bruke MAC-adressen og gjeldende tidskomponent.UUID4 -Den bruker pseudo-tilfeldige tallgeneratorer for å generere UUID-er, og slike typer UUID-er er gode å bruke for sikkerhetsformål.UUID3 og UUID5 -Den bruker kryptografisk hashing og applikasjonsleverte tekststrenger for å generere UUID.

Generer UUID ved hjelp av Python UUID-modulen

La oss generere UUID-ene til forskjellige versjoner ved å bruke Python uuid-modulen.

Bruke uuid1() - For å generere uuid, må vi importere uuid-modulen og deretter kalle uuid1()-metoden. La oss forstå følgende eksempel.

Eksempel - 1

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

Produksjon:

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

Struktur av UUID

Som vi kan se at det er fem komponenter i ovennevnte UUID og hver komponent har samme lengde. Strukturen til UUID er i formatet '8-4-4-4-12'.

UUID-strengrepresentasjonen er gitt nedenfor -

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

La oss bryte ned feltene ovenfor med UUID-er

    time_low -Det er en første 32 biter av id.time_mid -Det er neste 16 biter av id.time_high_and_version -Det er en neste 16 biter av id.clock_seq_hi_variant :Det er en neste 8 biter av id.clock_seq_low :Det er en neste 8 biter av id.node:Det er de siste 48 bitene av id.tid :Det er et tidskomponentfelt med id.klokkesekvens:Det er et 14 bit sekvensnummer.

La oss forstå et annet eksempel på generering av UUID i forskjellige formater som bytes, int og hex.

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

Produksjon:

 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 

Ulemper med UUID1

Datautvinning

UUID1 er assosiert med datamaskinens MAC-adresse og kan derfor være en trussel mot personvernet. Det gir imidlertid fullstendig unikhet.

Metode 2: bruk uuid4()

Denne metoden genererer tilfeldige tall med garanti for å sikre personvernet. La oss forstå følgende eksempel.

Eksempel -

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

Produksjon:

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

uuid1() vs uuid4

De uuid1() gir forsikring om ikke å forårsake noen kollisjon. Vi kan lage duplikater av UUID-er ved å lage mer enn 16384 uuid1 på mindre enn 100ns. Det gir ingen garanti for å sikre personvernet. De uuid1() anbefales ikke hvis du ikke ønsker å se maskinens MAC-adresser.

Metoden uuid4() genererer tilfeldig UUID ved å bruke de kryptografisk genererte sikre tallgeneratorene. Det genererer sikrere UUID-er. Det anbefales når UUID-er krever generering på separate maskiner.

sett inn vannmerke i word

UUID 3 og UUID 5 for å opprette en navnebasert UUID

Den navnebaserte UUID-en betyr at vi kan generere UUID-er ved å bruke versjon 3 eller 5 UUID.

Vi kan bruke navn og navnerom til å lage en serie unike UUID-er. Versjon 3 og 5 hasheser navneområdeidentifikator med et navn.

De uuid3() metoden genererer en UUID som er basert på MD5-hashen til navneområdeidentifikator og en streng. På den annen side genererer uuid5()-metoden UUID basert på SHA-1-hash-teknikken til en navneområdeidentifikator.

Nedenfor er navneromsidene definert av uuid3() eller uuid5().

    NAMESPACE_DNS -Det representerer et tradisjonelt domenenavn. For eksempel https://javatpoint.com.NAMESPACE_URL -Den representerer en URL.NAMESPACE_OID -Dette navneområdet er spesifisert strengen ISO OID.NAMESPACE_X500 -Når dette navneområdet er spesifisert, er navnestrengen en X.500 DN i DER eller et tekstutdataformat.

La oss forstå følgende eksempel for å generere UUID3 og UUID5 ved å bruke de forskjellige vertsnavnene og navneområdene.

Eksempel -

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

Produksjon:

 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 

Eksempel - 2: Generer UUID 3 og UUID 5 ved å bruke et annet navneområde

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

Produksjon:

 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 

Oppførselen til uuid3 og uuid5

  • Til tross for at samme navneområde og samme navn er like, er UUID-er generert på forskjellige tidspunkter.
  • To forskjellige navneområder i samme navneområde er forskjellige, det genererer de unike Id-ene.

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

Produksjon:

 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 

Hvordan konvertere streng til UUID og UUID til streng i Python?

De uuid.uuid1() metoden returnerer forekomsten av UUID-klassen. Vi kan få strengrepresentasjon av UUID ved å bruke str() metode. Det tilsvarende strengformatet kan brukes i sammenligning eller manipulasjon. La oss forstå følgende eksempel.

Eksempel -

 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) 

Produksjon:

java webtjenester
 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 

Nå vil vi lage UUID fra String.

Noen ganger får vi UUID i strengformat. Og applikasjonen vår må konvertere den i UUID-klassen for noen applikasjoner. La oss forstå følgende eksempel for å konvertere strengformatert UUID.

Eksempel -

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

Produksjon:

obj i java
 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 

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

Produksjon:

 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 

Generer reproduserbare UUID-er

Som vi nevnte tidligere, har UUID forskjellige attributter. Vi kan bruke samme UUID ved å bruke hvilken som helst av dens attributter. Bruker uuid modul , kan vi generere det samme uuid når som helst ved å bruke frøverdien. Frøverdien kan også brukes til å generere samme UUID. La oss forstå begge konseptene.

Følgende innganger kan brukes til å opprette UUID-forekomster.

  • String
  • Bytes
  • Bytes_le
  • Enger
  • int

Ved å bruke en av verdiene ovenfor, kan UUID genereres. La oss se følgende eksempel der vi bruker alle disse verdiene av samme UUID.

Eksempel -

 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) 

Produksjon:

 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 

Gjengi UUID med frø

Som navnet antyder, genererer Faker-modulen falske data for oss. Vi har brukt faker-modulen til å generere samme UUID gjentatte ganger. La oss forstå følgende eksempel.

Eksempel -

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

Produksjon:

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

Konklusjon

I denne opplæringen har vi diskutert uuid-modulen i detaljer og forstår hvordan vi kan generere de ulike UUID-ene. UUID-er hjelper oss med å definere det unike i applikasjonen/databasen og hjelper oss også med å definere identifikatorer for dokumenter, verter, applikasjoner, klienter og andre situasjoner.