logo

Com generar UUID en Python

En aquest tutorial, parlarem de com generar l'UUID a Python mitjançant el mòdul uuid. Abans d'endinsar-nos en aquest tema, entenem el concepte bàsic de l'UUID.

Introducció

UUID és un nom abreviat de identificadors universals únics també conegut com a GUID, és a dir, Globally Unique Identifier. És un número d'identificació de 128 bits de llarg per definir de manera única documents, usuaris, recursos o informació. Hi ha diverses versions d'UUID; en parlarem de tots en la propera secció.

  • L'UUID s'utilitza per definir identificadors únics a través de l'espai i el temps. L'espai i el temps fan que un cop generat l'UUID d'acord amb l'estàndard, els identificadors no poden duplicar els recursos existents.
  • L'UUID és l'opció més adequada quan es requereix unicitat.
  • Té un paper essencial en l'aplicació de criptografia i hashing.

Quan utilitzar l'UUID

El mòdul UUID es pot utilitzar en els escenaris següents.

A l'aplicació web -

  • L'UUID ens ajuda a gestionar l'estat generant un identificador de sessió únic.
  • En general, fem servir els valors d'increment automàtic per generar identificadors d'usuari. És un enfocament bastant senzill i fàcil d'endevinar. Tanmateix, els UUID són difícils d'endevinar perquè no es creen consecutivament.

En el sistema de bases de dades

host de Linux
  • Proporciona un avantatge important a la base de dades perquè l'UUID és independent de l'entorn. Significa que podem crear un UUID a qualsevol màquina utilitzant qualsevol aplicació.
  • La majoria de les aplicacions depenen del servidor de bases de dades per generar la clau única o primària. L'UUID és una bona opció per generar una clau de base de dades única que ens ajuda a canviar l'enfocament de generació de claus a la base de dades.
  • L'UUID és un valor real, no un pseudovalor com un nombre en una taula SQL.

Mòdul uuid de Python

El mòdul uuid de Python s'implementa segons RFC 4122, un estàndard i Copyright © de la societat d'Internet. Amb l'ajuda del mòdul UUID de Python, podem generar UUID de diversos tipus, com ara UUID de versió 1, 3, 4 i 5. El mòdul Python admet les següents versions d'UUID.

    UUID1 -Genera el número únic mitjançant l'adreça MAC i el component d'hora actual.UUID4 -Utilitza generadors de nombres pseudoaleatoris per generar UUID, i aquests tipus d'UUID són bons per utilitzar-los amb finalitats de seguretat.UUID3 i UUID5 -Utilitza hash criptogràfic i cadenes de text proporcionades per l'aplicació per generar UUID.

Genereu UUID mitjançant el mòdul UUID de Python

Generem els UUID de diverses versions mitjançant el mòdul uuid de Python.

Utilitzant uuid1() - Per generar l'uuid, hem d'importar el mòdul uuid i després cridar al mètode uuid1(). Entenem l'exemple següent.

Exemple - 1

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

Sortida:

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

Estructura de l'UUID

Com podem veure, hi ha cinc components a l'UUID anterior i cada component té la mateixa longitud. L'estructura de l'UUID té el format de '8-4-4-4-12'.

vaja concepte en java

La representació de la cadena UUID es mostra a continuació:

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

Desglossem els camps anteriors dels UUID

    time_low -Són els primers 32 bits d'identificació.time_mid -Són els següents 16 bits d'identificació.time_high_and_version -Són els següents 16 bits d'identificació.clock_seq_hi_variant :Són els següents 8 bits d'identificació.clock_seq_low :Són els següents 8 bits d'identificació.node :Són els últims 48 bits d'identificació.temps :És un camp de component temporal d'id.clock_seq:És un número de seqüència de 14 bits.

Entendrem un altre exemple de generació d'UUID en diversos formats, com ara bytes, int i hex.

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

Sortida:

 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 

Desavantatges de l'UUID1

L'UUID1 està associat a l'adreça MAC de l'ordinador i, per tant, pot ser una amenaça per a la privadesa. No obstant això, proporciona una singularitat completa.

Mètode 2: utilitzant uuid4()

Aquest mètode genera els números aleatoris amb la garantia de garantir la privadesa. Entenem l'exemple següent.

Exemple -

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

Sortida:

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

uuid1() vs uuid4

El uuid1() proporciona la seguretat de no produir cap col·lisió. Podem crear duplicats d'UUID creant més de 16384 uuid1 en menys de 100ns. No ofereix la garantia de garantir la privadesa. El uuid1() no es recomana si no voleu veure les adreces MAC de la vostra màquina.

El mètode uuid4() genera UUID aleatori mitjançant els generadors de números segurs generats criptogràficament. Genera UUID més segurs. Es recomana quan els UUID requereixen generar-los en màquines separades.

UUID 3 i UUID 5 per crear un UUID basat en nom

L'UUID basat en el nom significa que podem generar UUID mitjançant l'UUID de la versió 3 o 5.

Podem utilitzar noms i espais de noms per crear una sèrie d'UUID únics. Les versions 3 i 5 inclouen l'identificador d'espai de noms amb un nom.

El uuid3() El mètode genera un UUID que es basa en el hash MD5 de l'identificador d'espai de noms i una cadena. D'altra banda, el mètode uuid5() genera UUID basat en la tècnica hash SHA-1 d'un identificador d'espai de noms.

A continuació es mostren els identificadors dels espais de noms definits per uuid3() o uuid5().

què és uri
    NAMESPACE_DNS -Representa un nom de domini tradicional. Per exemple, https://javatpoint.com.NAMESPACE_URL -Representa una URL.NAMESPACE_OID -Aquest espai de noms s'especifica amb la cadena ISO OID.NAMESPACE_X500 -Quan s'especifica aquest espai de noms, la cadena de nom és un DN X.500 en DER o un format de sortida de text.

Entenem l'exemple següent per generar UUID3 i UUID5 utilitzant els diferents noms d'amfitrió i espai de noms.

Exemple -

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

Sortida:

 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 

Exemple - 2: genereu l'UUID 3 i l'UUID 5 amb un espai de noms diferent

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

Sortida:

 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 

El comportament de uuid3 i uuid5

  • Tot i que el mateix espai de noms i el mateix nom són similars, els UUID es generen en moments diferents.
  • Dos espais de noms diferents al mateix espai de noms són diferents, genera els identificadors únics.

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

Sortida:

 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 

Com convertir una cadena a UUID i UUID a una cadena a Python?

El uuid.uuid1() El mètode retorna la instància de la classe UUID. Podem obtenir una representació de cadena de l'UUID mitjançant l' str() mètode. El format de cadena corresponent es pot utilitzar en comparació o manipulació. Entenem l'exemple següent.

enter a doble java

Exemple -

 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) 

Sortida:

 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 

Ara, crearem UUID a partir de String.

De vegades, obtenim l'UUID en format de cadena. I la nostra aplicació ha de convertir-la a la instància de classe UUID per a algunes aplicacions. Entenem l'exemple següent per convertir UUID amb format de cadena.

Exemple -

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

Sortida:

què és un nom d'usuari
 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 

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

Sortida:

 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 

Genereu UUID reproductibles

Com hem esmentat anteriorment, l'UUID té diversos atributs. Podem utilitzar el mateix UUID utilitzant qualsevol dels seus atributs. Utilitzant el mòdul uuid , podem generar el mateix uuid en qualsevol moment utilitzant el valor de la llavor. El valor llavor també es pot utilitzar per generar el mateix UUID. Entenem els dos conceptes.

Les entrades següents es poden utilitzar per crear una instància UUID.

  • Corda
  • Bytes
  • Bytes_le
  • Camps
  • int

Utilitzant qualsevol dels valors anteriors, es pot generar l'UUID. Vegem el següent exemple on fem servir tots aquests valors del mateix UUID.

Exemple -

 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) 

Sortida:

 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 

Reprodueix UUID amb llavor

Com el seu nom indica, el mòdul Faker ens genera dades falses. Hem utilitzat el mòdul faker per generar el mateix UUID repetidament. Entenem l'exemple següent.

Exemple -

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

Sortida:

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

Conclusió

En aquest tutorial, hem parlat detalladament del mòdul uuid i hem entès com podem generar els diferents UUID. Els UUID ens ajuden a definir la singularitat de l'aplicació/base de dades i també ajuden a definir identificadors per a documents, amfitrions, aplicació, clients i altres situacions.