logo

Cómo generar UUID en Python

En este tutorial, discutiremos cómo generar el UUID en Python usando el módulo uuid. Antes de profundizar en este tema, comprendamos el concepto básico de UUID.

Introducción

UUID es una abreviatura de identificadores universalmente únicos también conocido como GUID, es decir, identificador único global. Es un número de identificación de 128 bits para definir de forma única documentos, usuarios, recursos o información. Existen varias versiones de UUID; Los discutiremos todos en la próxima sección.

  • El UUID se utiliza para definir identificadores únicos en el espacio y el tiempo. El espacio y el tiempo significan que una vez que se genera el UUID de acuerdo con el estándar, los identificadores no pueden duplicar los recursos existentes.
  • El UUID es la opción más adecuada cuando se requiere unicidad.
  • Desempeña un papel esencial en la criptografía y la aplicación de hash.

Cuando usar UUID

El módulo UUID se puede utilizar en los siguientes escenarios.

En aplicación web -

  • El UUID nos ayuda a gestionar el estado generando una identificación de sesión única.
  • Generalmente, utilizamos los valores de incremento automático para generar ID de usuario. Es un enfoque bastante sencillo y fácil de adivinar. Sin embargo, los UUID son difíciles de adivinar porque no se crean consecutivamente.

En el sistema de base de datos

eliminando el último compromiso git
  • Proporciona una ventaja significativa en la base de datos porque el UUID es independiente del entorno. Significa que podemos crear un UUID en cualquier máquina usando cualquier aplicación.
  • La mayoría de las aplicaciones dependen del servidor de la base de datos para generar la clave única o primaria. UUID es una buena opción para generar una clave de base de datos única que nos ayuda a cambiar el enfoque de generación de claves en la base de datos.
  • El UUID es un valor real, no un pseudovalor como un número en una tabla SQL.

Módulo uuid de Python

El módulo uuid de Python se implementa según RFC 4122, un estándar y Copyright © de Internet Society. Con la ayuda del módulo UUID de Python, podemos generar UUID de varios tipos, como UUID de versión 1, 3, 4 y 5. El módulo Python admite las siguientes versiones de UUID.

    UUID1 -Genera el número único utilizando la dirección MAC y el componente de hora actual.UUID4 -Utiliza generadores de números pseudoaleatorios para generar UUID, y estos tipos de UUID son buenos para fines de seguridad.UUID3 y UUID5 -Utiliza hash criptográfico y cadenas de texto proporcionadas por la aplicación para generar UUID.

Genere UUID usando el módulo UUID de Python

Generemos los UUID de varias versiones utilizando el módulo uuid de Python.

Usando uuid1() - Para generar el uuid, debemos importar el módulo uuid y luego llamar al método uuid1(). Entendamos el siguiente ejemplo.

Ejemplo 1

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

Producción:

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

Estructura del UUID

Como podemos ver, hay cinco componentes en el UUID anterior y cada componente tiene la misma longitud. La estructura de UUID tiene el formato de '8-4-4-4-12'.

La representación de la cadena UUID se proporciona a continuación:

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

Analicemos los campos anteriores de UUID

    tiempo_bajo -Son los primeros 32 bits de identificación.tiempo_medio -Son los siguientes 16 bits de identificación.time_high_and_version -Son los siguientes 16 bits de identificación.reloj_seq_hi_variant:Son los siguientes 8 bits de identificación.reloj_seq_low:Son los siguientes 8 bits de identificación.nodo:Son los últimos 48 bits de identificación.tiempo :Es un campo componente de tiempo de id.reloj_seq:Es un número de secuencia de 14 bits.

Comprendamos otro ejemplo de generación de UUID en varios formatos, como bytes, int y hexadecimal.

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

Producción:

genericidad en java
 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 

Desventajas de UUID1

El UUID1 está asociado con la dirección MAC de la computadora y, por lo tanto, puede ser una amenaza para la privacidad. Sin embargo, proporciona una singularidad total.

Método 2: usar uuid4()

Este método genera números aleatorios con la garantía de proteger la privacidad. Entendamos el siguiente ejemplo.

Ejemplo -

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

Producción:

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

uuid1() frente a uuid4

El uuid1() proporciona la seguridad de no producirse ninguna colisión. Podemos crear duplicados de UUID creando más de 16384 uuid1 en menos de 100 ns. No proporciona la garantía de garantizar la privacidad. El uuid1() No se recomienda si no desea ver las direcciones MAC de su máquina.

abstracción en java

El método uuid4() genera UUID aleatorio utilizando generadores de números seguros generados criptográficamente. Genera UUID más seguros. Se recomienda cuando los UUID requieren generarse en máquinas separadas.

UUID 3 y UUID 5 para crear un UUID basado en nombre

El UUID basado en nombre significa que podemos generar UUID utilizando la versión 3 o 5 de UUID.

Podemos usar nombres y espacios de nombres para crear una serie de UUID únicos. Las versiones 3 y 5 utilizan hash para identificar el espacio de nombres con un nombre.

El uuid3() El método genera un UUID que se basa en el hash MD5 del identificador del espacio de nombres y una cadena. Por otro lado, el método uuid5() genera UUID basado en la técnica de hash SHA-1 de un identificador de espacio de nombres.

A continuación se muestran los identificadores de espacios de nombres definidos por uuid3() o uuid5().

    NAMESPACE_DNS -Representa un nombre de dominio tradicional. Por ejemplo, https://javatpoint.com.NAMESPACE_URL -Representa una URL.NAMESPACE_OID -Este espacio de nombres se especifica con la cadena ISO OID.ESPACIO DE NOMBRES_X500 -Cuando se especifica este espacio de nombres, la cadena de nombre es un DN X.500 en DER o un formato de salida de texto.

Entendamos el siguiente ejemplo para generar UUID3 y UUID5 utilizando los distintos nombres de host y espacios de nombres.

Ejemplo -

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

Producción:

15 de 100.00
 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 

Ejemplo - 2: Generar UUID 3 y UUID 5 usando un espacio de nombres diferente

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

Producción:

 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 comportamiento de uuid3 y uuid5

  • A pesar de que el mismo espacio de nombres y el mismo nombre son similares, los UUID se generan en momentos diferentes.
  • Dos espacios de nombres diferentes en el mismo espacio de nombres son diferentes, genera identificadores únicos.

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

Producción:

 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 

¿Cómo convertir una cadena a UUID y un UUID a una cadena en Python?

El uuid.uuid1() El método devuelve la instancia de la clase UUID. Podemos obtener una representación de cadena de UUID usando el cadena() método. El formato de cadena correspondiente se puede utilizar en comparación o manipulación. Entendamos el siguiente ejemplo.

Ejemplo -

 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) 

Producción:

 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 

Ahora crearemos UUID a partir de String.

A veces obtenemos el UUID en formato de cadena. Y nuestra aplicación necesita convertirla en la instancia de clase UUID para algunas aplicaciones. Entendamos el siguiente ejemplo para convertir UUID con formato de cadena.

Ejemplo -

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

Producción:

marca de agua en word
 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 

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

Producción:

 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 

Generar UUID reproducibles

Como mencionamos anteriormente, UUID tiene varios atributos. Podemos utilizar el mismo UUID utilizando cualquiera de sus atributos. Utilizando el módulo uuid , podemos generar lo mismo UUID en cualquier momento usando el valor de la semilla. El valor inicial también se puede utilizar para generar el mismo UUID. Entendamos ambos conceptos.

Las siguientes entradas se pueden utilizar para crear una instancia de UUID.

  • Cadena
  • bytes
  • bytes_le
  • Campos
  • En t

Utilizando cualquiera de los valores anteriores, se puede generar el UUID. Veamos el siguiente ejemplo donde usamos todos estos valores del mismo UUID.

Ejemplo -

 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) 

Producción:

 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 

Reproducir UUID con semilla

Como sugiere su nombre, el módulo Faker genera datos falsos para nosotros. Hemos utilizado el módulo faker para generar el mismo UUID repetidamente. Entendamos el siguiente ejemplo.

Ejemplo -

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

Producción:

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

Conclusión

En este tutorial, analizamos el módulo uuid en detalle y entendemos cómo podemos generar los distintos UUID. Los UUID nos ayudan a definir la unicidad de la aplicación/base de datos y también ayudan a definir identificadores para documentos, hosts, aplicaciones, clientes y otras situaciones.