logo

Como gerar UUID em Python

Neste tutorial, discutiremos como gerar o UUID em Python usando o módulo uuid. Antes de mergulhar neste tópico, vamos entender o conceito básico do UUID.

Introdução

UUID é uma abreviatura de identificadores universalmente exclusivos também conhecido como GUID, ou seja, identificador globalmente exclusivo. É um número de identificação de 128 bits para definir exclusivamente documentos, usuários, recursos ou informações. Existem várias versões de UUIDs; discutiremos todos eles na próxima seção.

  • O UUID é usado para definir identificadores exclusivos no espaço e no tempo. Espaço e tempo significam que, uma vez gerado o UUID de acordo com o padrão, os identificadores não podem duplicar os recursos existentes.
  • O UUID é a opção mais adequada quando a exclusividade é necessária.
  • Ele desempenha um papel essencial na criptografia e na aplicação de hashing.

Quando usar UUID

O módulo UUID pode ser usado nos seguintes cenários.

Em aplicativo da Web -

  • O UUID nos ajuda a gerenciar o estado gerando um ID de sessão exclusivo.
  • Geralmente, usamos valores de incremento automático para gerar IDs de usuários. É uma abordagem bastante direta e fácil de adivinhar. No entanto, os UUIDs são difíceis de adivinhar porque não são criados consecutivamente.

No sistema de banco de dados

o que há em python
  • Ele oferece uma vantagem significativa no banco de dados porque o UUID é independente do ambiente. Isso significa que podemos criar um UUID em qualquer máquina usando qualquer aplicativo.
  • A maioria dos aplicativos depende do servidor de banco de dados para gerar a chave exclusiva ou primária. UUID é uma boa opção para gerar uma chave de banco de dados exclusiva que nos ajuda a mudar a abordagem de geração de chave no banco de dados.
  • O UUID é um valor real, não um pseudo valor como um número em uma tabela SQL.

Módulo uuid Python

O módulo uuid do Python é implementado de acordo com RFC 4122, um padrão e Copyright © da sociedade da Internet. Com a ajuda do módulo Python UUID, podemos gerar UUIDs em vários tipos, como UUIDs de versão 1, 3, 4 e 5. O módulo Python suporta as seguintes versões de UUID.

    UUID1-Ele gera o número exclusivo usando o endereço MAC e o componente de hora atual.UUID4-Ele usa geradores de números pseudo-aleatórios para gerar UUIDs, e esses tipos de UUIDs são bons para fins de segurança.UUID3 e UUID5 -Ele usa hashing criptográfico e strings de texto fornecidas pelo aplicativo para gerar UUID.

Gere UUID usando o módulo Python UUID

Vamos gerar os UUIDs de várias versões usando o módulo uuid do Python.

Usando uuid1() - Para gerar o uuid, devemos importar o módulo uuid e então chamar o método uuid1(). Vamos entender o exemplo a seguir.

Exemplo 1

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

Saída:

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

Estrutura do UUID

Como podemos ver que existem cinco componentes no UUID acima e cada componente tem o mesmo comprimento. A estrutura do UUID está no formato de '8-4-4-4-12'.

A representação da string UUID é fornecida abaixo -

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

Vamos analisar os campos de UUIDs acima

    tempo_baixo -São os primeiros 32 bits do ID.tempo_meio -São os próximos 16 bits de id.time_high_and_version -São os próximos 16 bits de id.clock_seq_hi_variant:São os próximos 8 bits de id.clock_seq_low:São os próximos 8 bits de id.nó :São os últimos 48 bits de id.tempo :É um campo componente de tempo do id.relógio_seq:É um número de sequência de 14 bits.

Vamos entender outro exemplo de geração de UUID em vários formatos, como bytes, int e hex.

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

Saída:

encapsulamento em 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 

Desvantagens do UUID1

O UUID1 está associado ao endereço MAC do computador e, portanto, pode ser uma ameaça à privacidade. No entanto, ele fornece exclusividade completa.

Método 2: usando uuid4()

Este método gera números aleatórios com a garantia de privacidade segura. Vamos entender o exemplo a seguir.

Exemplo -

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

Saída:

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

uuid1() vs uuid4

O uuid1() fornece a garantia de não produzir qualquer colisão. Podemos criar duplicatas de UUIDs criando mais de 16384 uuid1 em menos de 100ns. Ele não fornece garantia para proteger a privacidade. O uuid1() não é recomendado se você não deseja ver os endereços MAC da sua máquina.

classificação por bolha em java

O método uuid4() gera UUID aleatório usando geradores de números seguros gerados criptograficamente. Ele gera UUIDs mais seguros. É recomendado quando UUIDs exigem geração em máquinas separadas.

UUID 3 e UUID 5 para criar um UUID baseado em nome

O UUID baseado em nome significa que podemos gerar UUIDs usando o UUID da versão 3 ou 5.

Podemos usar nomes e namespaces para criar uma série de UUIDs exclusivos. As versões 3 e 5 fazem hash do identificador de namespace com um nome.

O uuid3() O método gera um UUID baseado no hash MD5 do identificador de namespace e uma string. Por outro lado, o método uuid5() gera UUID com base na técnica de hash SHA-1 de um identificador de namespace.

Abaixo estão os identificadores de namespaces definidos por uuid3() ou uuid5().

    NAMESPACE_DNS -Representa um nome de domínio tradicional. Por exemplo, https://javatpoint.com.NAMESPACE_URL -Representa um URL.NAMESPACE_OID -Este namespace é especificado pela string ISO OID.NAMESPACE_X500 -Quando esse namespace é especificado, a sequência de nomes é um DN X.500 em DER ou um formato de saída de texto.

Vamos entender o exemplo a seguir para gerar UUID3 e UUID5 usando vários nomes de host e namespace.

Exemplo -

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

Saída:

matriz de retorno java
 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 

Exemplo - 2: Gere UUID 3 e UUID 5 usando um namespace 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() 

Saída:

 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 

O comportamento de uuid3 e uuid5

  • Apesar do mesmo namespace e do mesmo nome serem semelhantes, os UUIDs são gerados em momentos diferentes.
  • Dois namespaces diferentes no mesmo namespace são diferentes, isso gera os IDs exclusivos.

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

Saída:

 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 

Como converter string em UUID e UUID em string em Python?

O uuid.uuid1() O método retorna a instância da classe UUID. Podemos obter uma representação de string do UUID usando o str() método. O formato de string correspondente pode ser usado em comparação ou manipulação. Vamos entender o exemplo a seguir.

Exemplo -

 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) 

Saída:

 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 

Agora, criaremos o UUID a partir de String.

Às vezes, obtemos o UUID em formato de string. E nosso aplicativo precisa convertê-lo na instância da classe UUID para alguns aplicativos. Vamos entender o exemplo a seguir para converter UUID formatado em string.

Exemplo -

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

Saída:

o que é jquery
 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 

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

Saída:

 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 

Gerar UUIDs reproduzíveis

Como mencionamos anteriormente, o UUID possui vários atributos. Podemos usar o mesmo UUID usando qualquer um de seus atributos. Usando o módulo UUID , podemos gerar o mesmo uuid a qualquer momento usando o valor inicial. O valor inicial também pode ser usado para gerar o mesmo UUID. Vamos entender os dois conceitos.

As entradas a seguir podem ser usadas para criar uma instância UUID.

  • Corda
  • Bytes
  • Bytes_le
  • Campos
  • interno

Usando qualquer um dos valores acima, o UUID pode ser gerado. Vejamos o exemplo a seguir onde usamos todos esses valores do mesmo UUID.

Exemplo -

 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) 

Saída:

 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 

Reproduzir UUID com semente

Como o próprio nome sugere, o módulo Faker gera dados falsos para nós. Usamos o módulo faker para gerar o mesmo UUID repetidamente. Vamos entender o exemplo a seguir.

Exemplo -

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

Saída:

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

Conclusão

Neste tutorial, discutimos o módulo uuid em detalhes e entendemos como podemos gerar os vários UUIDs. UUIDs nos ajudam a definir a exclusividade no aplicativo/banco de dados e também ajudam a definir identificadores para documentos, hosts, aplicativos, clientes e outras situações.