logo

Sådan genereres UUID i Python

I denne tutorial vil vi diskutere, hvordan man genererer UUID i Python ved hjælp af uuid-modulet. Før vi dykker ned i dette emne, lad os forstå det grundlæggende koncept for UUID.

Introduktion

UUID er en forkortelse for universelt unikke identifikatorer også kendt som GUID, dvs. Globally Unique Identifier. Det er et 128 bit langt ID-nummer til entydigt at definere dokumenter, brugere, ressourcer eller information. Der er forskellige versioner af UUID'er; vi vil diskutere dem alle i det kommende afsnit.

  • UUID'et bruges til at definere unikke identifikatorer på tværs af rum og tid. Plads og tid betyder, at når først UUID er genereret i overensstemmelse med standarden, kan identifikatorer ikke duplikere eksisterende ressourcer.
  • UUID er den bedst egnede mulighed, når der kræves unikhed.
  • Det spiller en væsentlig rolle i kryptografi og hashing-applikationer.

Hvornår skal man bruge UUID

UUID-modulet kan bruges i følgende scenarier.

I webapplikation -

  • UUID hjælper os med at styre staten ved at generere et unikt sessions-id.
  • Generelt bruger vi auto-increment-værdierne til at generere bruger-id'er. Det er en ret ligetil tilgang og let at gætte. UUID'er er dog svære at gætte, fordi de ikke oprettes fortløbende.

I databasesystemet

mockito når som helst
  • Det giver en væsentlig fordel i databasen, fordi UUID er miljøuafhængig. Det betyder, at vi kan oprette et UUID på enhver maskine ved hjælp af enhver applikation.
  • De fleste applikationer afhænger af databaseserveren til at generere den unikke eller primære nøgle. UUID er en god mulighed for at generere en unik databasenøgle, som hjælper os med at ændre nøglegenereringstilgangen i databasen.
  • UUID er en reel værdi, ikke en pseudoværdi som et tal i en SQL-tabel.

Python uuid modul

Python uuid-modulet er implementeret i henhold til RFC 4122, en standard og Copyright © fra internetsamfundet. Ved hjælp af Python UUID-modulet kan vi generere UUID'er i forskellige typer såsom 1, 3, 4 og 5 version UUID'er. Python-modulet understøtter følgende versioner af UUID.

    UUID1 -Den genererer det unikke nummer ved hjælp af MAC-adressen og den aktuelle tidskomponent.UUID4 -Den bruger pseudo-tilfældige talgeneratorer til at generere UUID'er, og sådanne typer UUID'er er gode at bruge til sikkerhedsformål.UUID3 og UUID5 -Den bruger kryptografisk hashing og applikationsleverede tekststrenge til at generere UUID.

Generer UUID ved hjælp af Python UUID-modul

Lad os generere UUID'erne for forskellige versioner ved hjælp af Python uuid-modulet.

Brug af uuid1() - For at generere uuid, skal vi importere uuid-modulet og derefter kalde uuid1()-metoden. Lad os forstå følgende eksempel.

Eksempel - 1

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

Produktion:

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

Struktur af UUID

Som vi kan se, er der fem komponenter i ovenstående UUID, og ​​hver komponent har samme længde. Strukturen af ​​UUID er i formatet af '8-4-4-4-12'.

UUID-strengrepræsentationen er givet nedenfor -

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

Lad os nedbryde ovenstående felter af UUID'er

    time_low -Det er de første 32 bits af id.time_mid -Det er de næste 16 bits af id.time_high_and_version -Det er de næste 16 bits af id.clock_seq_hi_variant :Det er de næste 8 bits af id.clock_seq_low :Det er de næste 8 bits af id.node:Det er de sidste 48 bits af id.tid:Det er et tidskomponentfelt af id.clock_seq:Det er et 14 bit sekvensnummer.

Lad os forstå et andet eksempel på generering af UUID i forskellige formater så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) 

Produktion:

 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 ved UUID1

data mining

UUID1 er forbundet med computerens MAC-adresse og kan derfor være en trussel mod privatlivets fred. Det giver dog fuldstændig unikhed.

Metode 2: ved hjælp af uuid4()

Denne metode genererer de tilfældige tal med garanti for at sikre privatlivets fred. Lad os forstå følgende eksempel.

Eksempel -

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

Produktion:

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

uuid1() vs uuid4

Det uuid1() giver sikkerhed for ikke at forårsage nogen kollision. Vi kan oprette dubletter af UUID'er ved at oprette mere end 16384 uuid1 på mindre end 100ns. Det giver ikke garanti for at sikre privatlivets fred. Det uuid1() anbefales ikke, hvis du ikke ønsker at se maskinens MAC-adresser.

Metoden uuid4() genererer tilfældig UUID ved at bruge de kryptografisk genererede sikre talgeneratorer. Det genererer mere sikre UUID'er. Det anbefales, når UUID'er kræver generering på separate maskiner.

c++ konverter int til streng

UUID 3 og UUID 5 for at oprette et navnebaseret UUID

Det navnebaserede UUID betyder, at vi kan generere UUID'er ved hjælp af version 3 eller 5 UUID.

Vi kan bruge navne og navnerum til at skabe en række unikke UUID'er. Version 3 og 5 hashing navneområde-id med et navn.

Det uuid3() metoden genererer et UUID, der er baseret på MD5-hash af navneområde-id og en streng. På den anden side genererer uuid5()-metoden UUID baseret på SHA-1-hash-teknikken for en navneområde-id.

Nedenfor er navnerums-id'erne defineret af uuid3() eller uuid5().

    NAMESPACE_DNS -Det repræsenterer et traditionelt domænenavn. For eksempel https://javatpoint.com.NAMESPACE_URL -Det repræsenterer en URL.NAMESPACE_OID -Dette navneområde er specificeret strengen ISO OID.NAMESPACE_X500 -Når dette navneområde er angivet, er navnestrengen en X.500 DN i DER eller et tekstoutputformat.

Lad os forstå følgende eksempel for at generere UUID3 og UUID5 ved hjælp af de forskellige værtsnavne og navneområder.

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

Produktion:

 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 hjælp af et andet 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() 

Produktion:

 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 

Opførselen af ​​uuid3 og uuid5

  • På trods af at det samme navneområde og samme navn er ens, genereres UUID'er på forskellige tidspunkter.
  • To forskellige navneområder i det samme navneområde er forskellige, det genererer de unikke Id'er.

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

Produktion:

 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 konverteres streng til UUID og UUID til streng i Python?

Det uuid.uuid1() metode returnerer forekomsten af ​​UUID-klassen. Vi kan få strengrepræsentation af UUID ved hjælp af str() metode. Det tilsvarende strengformat kan bruges til sammenligning eller manipulation. Lad os 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) 

Produktion:

fordele og ulemper ved teknologi
 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 

Nu vil vi oprette UUID fra String.

Nogle gange får vi UUID i strengformat. Og vores applikation skal konvertere den i UUID-klassen for nogle applikationer. Lad os forstå følgende eksempel for at konvertere strengformateret 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() 

Produktion:

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) 

Produktion:

 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 reproducerbare UUID'er

Som vi nævnte tidligere, har UUID forskellige attributter. Vi kan bruge den samme UUID ved at bruge enhver af dens attributter. Bruger uuid modul , kan vi generere det samme uuid når som helst ved at bruge frøværdien. Seed-værdien kan også bruges til at generere den samme UUID. Lad os forstå begge begreber.

Følgende input kan bruges til at oprette UUID-instanser.

  • Snor
  • Bytes
  • Bytes_le
  • Felter
  • int

Ved at bruge en af ​​ovenstående værdier kan UUID'et genereres. Lad os se følgende eksempel, hvor vi bruger alle disse værdier af 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) 

Produktion:

 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 

Genskab UUID med frø

Som navnet antyder, genererer Faker-modulet falske data til os. Vi har brugt faker-modulet til at generere det samme UUID gentagne gange. Lad os 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()) 

Produktion:

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

Konklusion

I denne tutorial har vi diskuteret uuid-modulet i detaljer og forstår, hvordan vi kan generere de forskellige UUID'er. UUID'er hjælper os med at definere det unikke i applikationen/databasen og hjælper også med at definere identifikatorer for dokumenter, værter, applikationer, klienter og andre situationer.