21.20.uuid — UUID objects according toRFC 4122

Source code:Lib/uuid.py


This module provides immutableUUID objects (theUUID class)and the functionsuuid1(),uuid3(),uuid4(),uuid5() forgenerating version 1, 3, 4, and 5 UUIDs as specified inRFC 4122.

If all you want is a unique ID, you should probably calluuid1() oruuid4(). Note thatuuid1() may compromise privacy since it createsa UUID containing the computer’s network address.uuid4() creates arandom UUID.

classuuid.UUID(hex=None,bytes=None,bytes_le=None,fields=None,int=None,version=None)

Create a UUID from either a string of 32 hexadecimal digits, a string of 16bytes in big-endian order as thebytes argument, a string of 16 bytes inlittle-endian order as thebytes_le argument, a tuple of six integers(32-bittime_low, 16-bittime_mid, 16-bittime_hi_version,8-bitclock_seq_hi_variant, 8-bitclock_seq_low, 48-bitnode) as thefields argument, or a single 128-bit integer as theint argument.When a string of hex digits is given, curly braces, hyphens,and a URN prefix are all optional. For example, theseexpressions all yield the same 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)

Exactly one ofhex,bytes,bytes_le,fields, orint must be given.Theversion argument is optional; if given, the resulting UUID will have itsvariant and version number set according toRFC 4122, overriding bits in thegivenhex,bytes,bytes_le,fields, orint.

Comparison of UUID objects are made by way of comparing theirUUID.int attributes. Comparison with a non-UUID objectraises aTypeError.

str(uuid) returns a string in the form12345678-1234-5678-1234-567812345678 where the 32 hexadecimal digitsrepresent the UUID.

UUID instances have these read-only attributes:

UUID.bytes

The UUID as a 16-byte string (containing the six integer fields in big-endianbyte order).

UUID.bytes_le

The UUID as a 16-byte string (withtime_low,time_mid, andtime_hi_versionin little-endian byte order).

UUID.fields

A tuple of the six integer fields of the UUID, which are also available as sixindividual attributes and two derived attributes:

Field

Meaning

time_low

the first 32 bits of the UUID

time_mid

the next 16 bits of the UUID

time_hi_version

the next 16 bits of the UUID

clock_seq_hi_variant

the next 8 bits of the UUID

clock_seq_low

the next 8 bits of the UUID

node

the last 48 bits of the UUID

time

the 60-bit timestamp

clock_seq

the 14-bit sequence number

UUID.hex

The UUID as a 32-character hexadecimal string.

UUID.int

The UUID as a 128-bit integer.

UUID.urn

The UUID as a URN as specified inRFC 4122.

UUID.variant

The UUID variant, which determines the internal layout of the UUID. This will beone of the constantsRESERVED_NCS,RFC_4122,RESERVED_MICROSOFT, orRESERVED_FUTURE.

UUID.version

The UUID version number (1 through 5, meaningful only when the variant isRFC_4122).

Theuuid module defines the following functions:

uuid.getnode()

Get the hardware address as a 48-bit positive integer. The first time thisruns, it may launch a separate program, which could be quite slow. If allattempts to obtain the hardware address fail, we choose a random 48-bit numberwith its eighth bit set to 1 as recommended inRFC 4122. “Hardware address”means the MAC address of a network interface, and on a machine with multiplenetwork interfaces the MAC address of any one of them may be returned.

uuid.uuid1(node=None,clock_seq=None)

Generate a UUID from a host ID, sequence number, and the current time. Ifnodeis not given,getnode() is used to obtain the hardware address. Ifclock_seq is given, it is used as the sequence number; otherwise a random14-bit sequence number is chosen.

uuid.uuid3(namespace,name)

Generate a UUID based on the MD5 hash of a namespace identifier (which is aUUID) and a name (which is a string).

uuid.uuid4()

Generate a random UUID.

uuid.uuid5(namespace,name)

Generate a UUID based on the SHA-1 hash of a namespace identifier (which is aUUID) and a name (which is a string).

Theuuid module defines the following namespace identifiers for use withuuid3() oruuid5().

uuid.NAMESPACE_DNS

When this namespace is specified, thename string is a fully-qualified domainname.

uuid.NAMESPACE_URL

When this namespace is specified, thename string is a URL.

uuid.NAMESPACE_OID

When this namespace is specified, thename string is an ISO OID.

uuid.NAMESPACE_X500

When this namespace is specified, thename string is an X.500 DN in DER or atext output format.

Theuuid module defines the following constants for the possible valuesof thevariant attribute:

uuid.RESERVED_NCS

Reserved for NCS compatibility.

uuid.RFC_4122

Specifies the UUID layout given inRFC 4122.

uuid.RESERVED_MICROSOFT

Reserved for Microsoft compatibility.

uuid.RESERVED_FUTURE

Reserved for future definition.

See also

RFC 4122 - A Universally Unique IDentifier (UUID) URN Namespace

This specification defines a Uniform Resource Name namespace for UUIDs, theinternal format of UUIDs, and methods of generating UUIDs.

21.20.1.Example

Here are some examples of typical usage of theuuid module:

>>>importuuid>>># 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,'python.org')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,'python.org')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.bytesb'\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')