uuid
— Objetos UUID conforme RFC 9562¶
Código-fonte: Lib/uuid.py
Este módulo fornece objetos UUID
imutáveis (a classe UUID
) e funções para gerar UUIDs correspondentes a uma versão específica de UUID, conforme especificado em RFC 9562 (que substitui RFC 4122), por exemplo, uuid1()
para a versão 1 de UUID, uuid3()
para a versão 3 de UUID e assim por diante. Observe que a versão 2 de UUID foi omitida deliberadamente, pois está fora do escopo da RFC.
Se tudo o que você quer é um ID único, você provavelmente deve chamar uuid1()
ou uuid4()
. Note que uuid1()
pode comprometer a privacidade, pois cria um UUID contendo o endereço de rede do computador. uuid4()
cria um UUID aleatório.
Dependendo do suporte da plataforma subjacente, uuid1()
pode ou não retornar um UUID “seguro”. Um UUID seguro é aquele que é gerado usando métodos de sincronização que garantem que dois processos não possam obter o mesmo UUID. Todas as instâncias de UUID
têm um atributo is_safe
que retransmite qualquer informação sobre a segurança do UUID, usando esta enumeração:
- class uuid.SafeUUID¶
Adicionado na versão 3.7.
- safe¶
O UUID foi gerado pela plataforma de forma segura para multiprocessamento.
- unsafe¶
O UUID não foi gerado de forma segura para multiprocessamento.
- unknown¶
A plataforma não fornece informações sobre se o UUID foi gerado com segurança ou não.
- class uuid.UUID(hex=None, bytes=None, bytes_le=None, fields=None, int=None, version=None, *, is_safe=SafeUUID.unknown)¶
Cria um UUID a partir de uma sequência de 32 dígitos hexadecimais, uma sequência de 16 bytes em ordem big-endian como o argumento bytes, uma sequência de 16 bytes em ordem little-endian como o argumento bytes_le, uma tupla de seis inteiros (time_low de 32 bits, time_mid de 16 bits, time_hi_version de 16 bits, clock_seq_hi_variant de 8 bits, clock_seq_low de 8 bits, node de 48 bits) como o argumento fields ou um único inteiro de 128 bits como o argumento int. Quando uma sequência de dígitos hexadecimais é fornecida, chaves, hifens e um prefixo URN são todos opcionais. Por exemplo, todas essas expressões produzem o mesmo UUID:
UUID('{12345678-1234-5678-1234-567812345678}') UUID('12345678123456781234567812345678') UUID('urn:uuid:12345678-1234-5678-1234-567812345678') UUID(bytes=b'\x12\x34\x56\x78'*4) UUID(bytes_le=b'\x78\x56\x34\x12\x34\x12\x78\x56' + b'\x12\x34\x56\x78\x12\x34\x56\x78') UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678)) UUID(int=0x12345678123456781234567812345678)
Exatamente um de hex, bytes, bytes_le, fields ou int deve ser fornecido. O argumento version é opcional; se fornecido, o UUID resultante terá sua variante e número de versão definidos de acordo com RFC 9562, substituindo bits no hex, bytes, bytes_le, fields ou int fornecido.
A comparação de objetos UUID é feita por meio da comparação de seus atributos
UUID.int
. A comparação com um objeto não UUID levanta umaTypeError
.str(uuid)
retorna uma string no formato12345678-1234-5678-1234-567812345678
onde os 32 dígitos hexadecimais representam o UUID.
As instâncias UUID
têm estes atributos de somente leitura:
- UUID.bytes¶
O UUID como uma string de 16 bytes (contendo os seis campos inteiros em ordem de bytes big-endian).
- UUID.bytes_le¶
O UUID como uma string de 16 bytes (com time_low, time_mid e time_hi_version em ordem de bytes little-endian).
- UUID.fields¶
Uma tupla dos seis campos de inteiros do UUID, que também estão disponíveis como seis atributos individuais e dois atributos derivados:
Campo |
Significado |
|
Os primeiros 32 bits do UUID. Relevante apenas para a versão 1. |
|
Os próximos 16 bits do UUID. Relevante apenas para a versão 1. |
|
Os próximos 16 bits do UUID. Relevante apenas para a versão 1. |
|
Os próximos 8 bits do UUID. Relevante apenas para as versões 1 e 6. |
|
Os próximos 8 bits do UUID. Relevante apenas para as versões 1 e 6. |
|
Os últimos 48 bits do UUID. Relevante apenas para a versão 1. |
|
O registro de data e hora de 60 bits como uma contagem de intervalos de 100 nanossegundos desde a época gregoriana (1582-10-15 00:00:00) para as versões 1 e 6, ou o registro de data e hora de 48 bits em milissegundos desde a época Unix (1970-01-01 00:00:00) para a versão 7. |
|
Número de sequência de 14 bits. Relevante apenas para as versões 1 e 6. |
- UUID.hex¶
O UUID como uma sequência hexadecimal de 32 caracteres minúsculos.
- UUID.int¶
O UUID como um inteiro de 128 bits.
- UUID.variant¶
A variante UUID, que determina o layout interno do UUID. Esta será uma das constantes
RESERVED_NCS
,RFC_4122
,RESERVED_MICROSOFT
ouRESERVED_FUTURE
.
- UUID.version¶
O número da versão do UUID (1 a 8, significativo somente quando a variante é
RFC_4122
).Alterado na versão 3.14: Adicionadas versões 6, 7 e 8 do UUID.
- UUID.is_safe¶
Uma enumeração de
SafeUUID
que indica se a plataforma gerou o UUID de forma segura para multiprocessamento.Adicionado na versão 3.7.
O módulo uuid
define as seguintes funções:
- uuid.getnode()¶
Obtém o endereço de hardware como um inteiro positivo de 48 bits. Na primeira vez que isso for executado, ele pode iniciar um programa separado, o que pode ser bem lento. Se todas as tentativas de obter o endereço de hardware falharem, escolhemos um número aleatório de 48 bits com o bit multicast (bit menos significativo do primeiro octeto) definido como 1, conforme recomendado no RFC 4122. “Endereço de hardware” significa o endereço MAC de uma interface de rede. Em uma máquina com várias interfaces de rede, endereços MAC administrados universalmente (ou seja, onde o segundo bit menos significativo do primeiro octeto é não definido) serão preferidos em relação a endereços MAC administrados localmente, mas sem nenhuma outra garantia de ordenação.
Alterado na versão 3.7: Endereços MAC administrados universalmente são preferidos em vez de endereços MAC administrados localmente, pois os primeiros têm garantia de serem globalmente exclusivos, enquanto os últimos não.
- uuid.uuid1(node=None, clock_seq=None)¶
Gera um UUID a partir de um ID de host, número de sequência e hora atual de acordo com RFC 9562, §5.1.
Quando node não é especificado,
getnode()
é usado para obter o endereço de hardware como um inteiro positivo de 48 bits. Quando um número de sequência clock_seq não é especificado, um inteiro positivo pseudoaleatório de 14 bits é gerado.Se node ou clock_seq excederem a contagem de bits esperada, apenas seus bits menos significativos serão mantidos.
- uuid.uuid3(namespace, name)¶
Gera um UUID com base no hash MD5 de um identificador de espaço de nomes (que é um UUID) e um nome (que é um objeto
bytes
ou uma string que será codificada usando UTF-8) de acordo com RFC 9562, §5.3.
- uuid.uuid4()¶
Gera um UUID aleatório em um método criptograficamente seguro de acordo com RFC 9562, §5.4.
- uuid.uuid5(namespace, name)¶
Gera um UUID com base no hash SHA-1 de um identificador de espaço de nomes (que é um UUID) e um nome (que é um objeto
bytes
ou uma string que será codificada usando UTF-8) de acordo com RFC 9562, §5.5.
- uuid.uuid6(node=None, clock_seq=None)¶
Gera um UUID a partir de um número de sequência e hora atual de acordo com RFC 9562, §5.6.
Esta é uma alternativa ao
uuid1()
para melhorar a localidade do banco de dados.Quando node não é especificado,
getnode()
é usado para obter o endereço de hardware como um inteiro positivo de 48 bits. Quando um número de sequência clock_seq não é especificado, um inteiro positivo pseudoaleatório de 14 bits é gerado.Se node ou clock_seq excederem a contagem de bits esperada, apenas seus bits menos significativos serão mantidos.
Adicionado na versão 3.14.
- uuid.uuid7()¶
Gera um UUID baseado em tempo de acordo com RFC 9562, §5.7.
Para portabilidade entre plataformas sem precisão de submilissegundos, os UUIDs produzidos por esta função incorporam um registro de data e hora de 48 bits e usam um contador de 42 bits para garantir a monotonicidade dentro de um milissegundo.
Adicionado na versão 3.14.
- uuid.uuid8(a=None, b=None, c=None)¶
Gera um UUID pseudoaleatório de acordo com RFC 9562, §5.8.
Quando especificados, espera-se que os parâmetros a, b e c sejam inteiros positivos de 48, 12 e 62 bits, respectivamente. Se excederem a contagem de bits esperada, apenas os bits menos significativos serão mantidos; argumentos não especificados são substituídos por um inteiro pseudoaleatório de tamanho apropriado.
Por padrão, a, b e c não são gerados por um gerador de números pseudoaleatórios criptograficamente seguro (CSPRNG). Use
uuid4()
quando um UUID precisar ser usado em um contexto de segurança sensível.Adicionado na versão 3.14.
O módulo uuid
define os seguintes identificadores de espaço de nomes para uso com uuid3()
ou uuid5()
.
- uuid.NAMESPACE_DNS¶
Quando esse espaço de nomes é especificado, a string name é um nome de domínio totalmente qualificado.
- uuid.NAMESPACE_URL¶
Quando esse espaço de nomes é especificado, a string name é uma URL.
- uuid.NAMESPACE_OID¶
Quando esse espaço de nomes é especificado, a string name é um OID ISO.
- uuid.NAMESPACE_X500¶
Quando esse espaço de nomes é especificado, a string name é um DN X.500 em DER ou um formato de saída de texto.
O módulo uuid
define as seguintes constantes para os valores possíveis do atributo variant
:
- uuid.RESERVED_NCS¶
Reservado para compatibilidade com NCS.
- uuid.RFC_4122¶
Especifica o layout do UUID fornecido em RFC 4122. Esta constante é mantida para retrocompatibilidade, mesmo que RFC 4122 tenha sido substituído por RFC 9562.
- uuid.RESERVED_MICROSOFT¶
Reservado para compatibilidade com Microsoft.
- uuid.RESERVED_FUTURE¶
Reservado para definição futura.
O módulo uuid
define os valores especiais de UUID Nil e Max:
- uuid.NIL¶
Uma forma especial de UUID que é especificada para ter todos os 128 bits definidos como zero de acordo com RFC 9562, §5.9.
Adicionado na versão 3.14.
- uuid.MAX¶
Uma forma especial de UUID que é especificada para ter todos os 128 bits definidos como um, de acordo com RFC 9562, §5.10.
Adicionado na versão 3.14.
Ver também
- RFC 9562 - Um espaço de nomes de URN de identificador universalmente exclusivo (UUID)
Esta especificação define um espaço de nomes de Uniform Resource Name para UUIDs, o formato interno de UUIDs e métodos de geração de UUIDs.
Uso na linha de comando¶
Adicionado na versão 3.12.
O módulo uuid
pode ser invocado como um script na linha de comando:
python -m uuid [-h] [-u {uuid1,uuid3,uuid4,uuid5,uuid6,uuid7,uuid8}] [-n ESPAÇOS-DE-NOME] [-N NOME]
As seguintes opções são aceitas:
- -h, --help¶
Mostra a mensagem de ajuda e sai.
- -u <uuid>¶
- --uuid <uuid>¶
Especifica o nome da função a ser usada para gerar o uuid. Por padrão,
uuid4()
é usado.Alterado na versão 3.14: Permite gerar versões 6, 7 e 8 do UUID.
- -n <namespace>¶
- --namespace <namespace>¶
O espaço de nomes é um
UUID
, ou@ns
ondens
é um UUID predefinido bem conhecido endereçado pelo nome do espaço de nomes. Como@dns
,@url
,@oid
e@x500
. Necessário apenas para funçõesuuid3()
/uuid5()
.
Exemplo¶
Aqui estão alguns exemplos de uso típico do módulo uuid
:
>>> import uuid
>>> # make a UUID based on the host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')
>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'pyth.onl')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')
>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')
>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'pyth.onl')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')
>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')
>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'
>>> # get the raw 16 bytes of the UUID
>>> x.bytes
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')
>>> # get the Nil UUID
>>> uuid.NIL
UUID('00000000-0000-0000-0000-000000000000')
>>> # get the Max UUID
>>> uuid.MAX
UUID('ffffffff-ffff-ffff-ffff-ffffffffffff')
>>> # get UUIDv7 creation (local) time as a timestamp in milliseconds
>>> u = uuid.uuid7()
>>> u.time
1743936859822
>>> # get UUIDv7 creation (local) time as a datetime object
>>> import datetime as dt
>>> dt.datetime.fromtimestamp(u.time / 1000)
datetime.datetime(...)
Exemplo de linha de comando¶
Aqui estão alguns exemplos de uso típico da interface de linha de comando do uuid
:
# gera um UUID aleatório - por padrão uuid4() é usado
$ python -m uuid
# gera um UUID usando uuid1()
$ python -m uuid -u uuid1
# gera um UUID usando uuid5
$ python -m uuid -u uuid5 -n @url -N example.com
# gera 42 UUIDs aleatórios
$ python -m uuid -C 42