uuid — UUID-objekt enligt RFC 9562

Källkod: Lib/uuid.py


Denna modul tillhandahåller oföränderliga UUID-objekt (klassen UUID) och funktioner för att generera UUIDs som motsvarar en specifik UUID-version enligt specifikationen i RFC 9562 (som ersätter RFC 4122), till exempel uuid1() för UUID version 1, uuid3() för UUID version 3, och så vidare. Observera att UUID version 2 avsiktligt utelämnas eftersom den ligger utanför RFC:s tillämpningsområde.

Om allt du vill ha är ett unikt ID bör du förmodligen anropa uuid1() eller uuid4(). Observera att uuid1() kan äventyra integriteten eftersom det skapar ett UUID som innehåller datorns nätverksadress. uuid4() skapar ett slumpmässigt UUID.

Beroende på stöd från den underliggande plattformen kan uuid1() returnera ett ”säkert” UUID eller inte. Ett säkert UUID är ett UUID som genereras med hjälp av synkroniseringsmetoder som säkerställer att inga två processer kan få samma UUID. Alla instanser av UUID har ett is_safe-attribut som förmedlar all information om UUID:s säkerhet med hjälp av denna uppräkning:

class uuid.SafeUUID

Tillagd i version 3.7.

safe

UUID:n genererades av plattformen på ett multiprocessing-säkert sätt.

unsafe

UUID:n genererades inte på ett sätt som är säkert för flera processorer.

unknown

Plattformen tillhandahåller inte information om huruvida UUID genererades på ett säkert sätt eller inte.

class uuid.UUID(hex=None, bytes=None, bytes_le=None, fields=None, int=None, version=None, *, is_safe=SafeUUID.unknown)

Skapa ett UUID från antingen en sträng med 32 hexadecimala siffror, en sträng med 16 byte i big-endian-ordning som argument bytes, en sträng med 16 byte i little-endian-ordning som argument bytes_le, en tupel med sex heltal (32-bitars time_low, 16-bitars time_mid, 16-bitars time_hi_version, 8-bitars clock_seq_hi_variant, 8-bitars clock_seq_low, 48-bitars node) som argument fields, eller ett enda 128-bitars heltal som argument int. När en sträng med hexadecimala siffror anges är hakparenteser, bindestreck och ett URN-prefix valfria. Till exempel ger alla dessa uttryck samma 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(fält=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
UUID(int=0x12345678123456781234567812345678)

Exakt en av hex, bytes, bytes_le, fields eller int måste anges. Argumentet version är valfritt; om det anges kommer det resulterande UUID att ha sin variant och sitt versionsnummer enligt RFC 9562, vilket åsidosätter bitar i de angivna hex, bytes, bytes_le, fields eller int.

Jämförelse av UUID-objekt görs genom att jämföra deras UUID.int-attribut. Jämförelse med ett icke-UUID-objekt ger upphov till ett TypeError.

str(uuid) returnerar en sträng i formen 12345678-1234-5678-1234-567812345678 där de 32 hexadecimala siffrorna representerar UUID.

UUID-instanser har dessa skrivskyddade attribut:

UUID.bytes

UUID som en 16-byte-sträng (som innehåller de sex heltalsfälten i big-endian byteordning).

UUID.bytes_le

UUID som en 16-byte-sträng (med time_low, time_mid och time_hi_version i little-endian byte-ordning).

UUID.fields

En tupel av UUID:s sex heltalsfält, som också finns tillgängliga som sex individuella attribut och två härledda attribut:

Fält

Betydelse

UUID.time_low

De första 32 bitarna av UUID. Endast relevant för version 1.

UUID.time_mid

De kommande 16 bitarna av UUID. Endast relevant för version 1.

UUID.time_hi_version

De kommande 16 bitarna av UUID. Endast relevant för version 1.

UUID.clock_seq_hi_variant

De kommande 8 bitarna av UUID. Endast relevant för version 1 och 6.

UUID.clock_seq_low

De kommande 8 bitarna av UUID. Endast relevant för version 1 och 6.

UUID.node

De sista 48 bitarna av UUID. Endast relevant för version 1.

UUID.time

60-bitars tidsstämpel i 100-nanosekundersintervall sedan gregoriansk epok (1582-10-15 00:00:00) för version 1 och 6, eller 48-bitars tidsstämpel i millisekunder sedan Unix epok (1970-01-01 00:00:00) för version 7.

UUID.clock_seq

14-bitars sekvensnummer. Endast relevant för version 1 och 6.

UUID.hex

UUID som en 32 tecken lång hexadecimal sträng med gemener.

UUID.int

UUID som ett 128-bitars heltal.

UUID.urn

UUID som ett URN enligt specifikationen i RFC 9562.

UUID.variant

UUID-varianten, som bestämmer den interna layouten för UUID. Detta kommer att vara en av konstanterna RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, eller RESERVED_FUTURE.

UUID.version

UUID:s versionsnummer (1 till 8, endast meningsfullt när varianten är RFC_4122).

Ändrad i version 3.14: Lagt till UUID version 6, 7 och 8.

UUID.is_safe

En uppräkning av SafeUUID som anger om plattformen genererade UUID:n på ett multiprocessing-säkert sätt.

Tillagd i version 3.7.

Modulen uuid definierar följande funktioner:

uuid.getnode()

Hämta hårdvaruadressen som ett 48-bitars positivt heltal. Första gången detta körs kan det hända att ett separat program startas, vilket kan vara ganska långsamt. Om alla försök att få fram maskinvaruadressen misslyckas väljer vi ett slumpmässigt 48-bitarsnummer med multicastbiten (den minst signifikanta biten i den första oktetten) satt till 1 enligt rekommendationen i RFC 4122. med ”hårdvaruadress” avses MAC-adressen för ett nätverksgränssnitt. På en maskin med flera nätverksgränssnitt kommer universellt administrerade MAC-adresser (dvs. där den näst minst signifikanta biten i den första oktetten är unset) att föredras framför lokalt administrerade MAC-adresser, men utan några andra ordningsgarantier.

Ändrad i version 3.7: Universellt administrerade MAC-adresser är att föredra framför lokalt administrerade MAC-adresser, eftersom de förra garanterat är globalt unika, medan de senare inte är det.

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

Generera ett UUID från ett värd-ID, sekvensnummer och aktuell tid enligt RFC 9562, §5.1.

När node inte är specificerat används getnode() för att få hårdvaruadressen som ett 48-bitars positivt heltal. När ett sekvensnummer clock_seq inte specificeras genereras ett pseudoslumpmässigt 14-bitars positivt heltal.

Om node eller clock_seq överskrider sitt förväntade bitantal sparas endast de minst signifikanta bitarna.

uuid.uuid3(namespace, name)

Generera ett UUID baserat på MD5-hashningen av en namnrymdsidentifierare (som är ett UUID) och ett namn (som är ett bytes-objekt eller en sträng som kommer att kodas med UTF-8) enligt RFC 9562, §5.3.

uuid.uuid4()

Generera ett slumpmässigt UUID med en kryptografiskt säker metod enligt RFC 9562, §5.4.

uuid.uuid5(namespace, name)

Generera ett UUID baserat på SHA-1-hashningen av en namnrymdsidentifierare (som är ett UUID) och ett namn (som är ett bytes-objekt eller en sträng som kommer att kodas med UTF-8) enligt RFC 9562, §5.5.

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

Generera ett UUID från ett sekvensnummer och den aktuella tiden enligt RFC 9562, §5.6.

Detta är ett alternativ till uuid1() för att förbättra databaslokaliseringen.

När node inte är specificerat används getnode() för att få hårdvaruadressen som ett 48-bitars positivt heltal. När ett sekvensnummer clock_seq inte specificeras genereras ett pseudoslumpmässigt 14-bitars positivt heltal.

Om node eller clock_seq överskrider sitt förväntade bitantal sparas endast de minst signifikanta bitarna.

Tillagd i version 3.14.

uuid.uuid7()

Generera en tidsbaserad UUID enligt RFC 9562, §5.7.

För portabilitet på plattformar som saknar precision under en millisekund bäddar UUID:er som produceras av den här funktionen in en 48-bitars tidsstämpel och använder en 42-bitars räknare för att garantera monotonicitet inom en millisekund.

Tillagd i version 3.14.

uuid.uuid8(a=None, b=None, c=None)

Generera ett pseudoslumpmässigt UUID enligt RFC 9562, §5.8.

När parametrarna a, b och c specificeras förväntas de vara positiva heltal på 48, 12 respektive 62 bitar. Om de överstiger det förväntade bitantalet behålls endast de minst signifikanta bitarna; ospecificerade argument ersätts med ett pseudoslumpmässigt heltal av lämplig storlek.

Som standard genereras a, b och c inte av en kryptografiskt säker pseudoslumptalsgenerator (CSPRNG). Använd uuid4() när ett UUID behöver användas i ett säkerhetskänsligt sammanhang.

Tillagd i version 3.14.

Modulen uuid definierar följande namnrymdsidentifierare för användning med uuid3() eller uuid5().

uuid.NAMESPACE_DNS

När denna namnrymd anges är strängen name ett fullständigt kvalificerat domännamn.

uuid.NAMESPACE_URL

När detta namnrymd anges är name-strängen en URL.

uuid.NAMESPACE_OID

När denna namnrymd anges är name-strängen en ISO OID.

uuid.NAMESPACE_X500

När denna namnrymd anges är name-strängen en X.500 DN i DER- eller textutmatningsformat.

Modulen uuid definierar följande konstanter för de möjliga värdena för attributet variant:

uuid.RESERVED_NCS

Reserverad för NCS-kompatibilitet.

uuid.RFC_4122

Anger den UUID-layout som anges i RFC 4122. Denna konstant behålls för bakåtkompatibilitet även om RFC 4122 har ersatts av RFC 9562.

uuid.RESERVED_MICROSOFT

Reserverad för Microsoft-kompatibilitet.

uuid.RESERVED_FUTURE

Reserverad för framtida definition.

Modulen uuid definierar de speciella Nil- och Max-värdena för UUID:

uuid.NIL

En speciell form av UUID som är specificerad att ha alla 128 bitar nollställda enligt RFC 9562, §5.9.

Tillagd i version 3.14.

uuid.MAX

En speciell form av UUID som är specificerad så att alla 128 bitar är satta till ett enligt RFC 9562, §5.10.

Tillagd i version 3.14.

Se även

RFC 9562 - En universellt unik ID-identifierare (UUID) URN-namnrymd

Denna specifikation definierar ett namnrymd för UUID:er (Uniform Resource Name), det interna formatet för UUID:er och metoder för att generera UUID:er.

Användning av kommandoraden

Tillagd i version 3.12.

Modulen uuid kan exekveras som ett skript från kommandoraden.

python -m uuid [-h] [-u {uuid1,uuid3,uuid4,uuid5,uuid6,uuid7,uuid8}] [-n NAMESPACE] [-N NAME]

Följande alternativ accepteras:

-h, --help

Visa hjälpmeddelandet och avsluta.

-u <uuid>
--uuid <uuid>

Ange det funktionsnamn som ska användas för att generera uuid. Som standard används uuid4().

Ändrad i version 3.14: Tillåt generering av UUID version 6, 7 och 8.

-n <namespace>
--namespace <namespace>

Namnrymden är ett UUID eller @ns där ns är ett välkänt fördefinierat UUID som adresseras av namnrymdens namn. Till exempel @dns, @url, @oid och @x500. Krävs endast för funktionerna uuid3() / uuid5().

-N <name>
--name <name>

Det namn som används för att generera uuid. Krävs endast för funktionerna uuid3() / uuid5().

-C <num>
--count <num>

Generera num nya UUID:er.

Tillagd i version 3.14.

Exempel

Här följer några exempel på typisk användning av modulen 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, '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.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')

>>> # same as UUIDv1 but with fields reordered to improve DB locality
>>> uuid.uuid6()
UUID('1f0799c0-98b9-62db-92c6-a0d365b91053')

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

>>> # make a UUID with custom blocks
>>> uuid.uuid8(0x12345678, 0x9abcdef0, 0x11223344)
UUID('00001234-5678-8ef0-8000-000011223344')

Exempel på kommandoraden

Här följer några exempel på typisk användning av kommandoradsgränssnittet uuid:

# generera ett slumpmässigt UUID - som standard används uuid4()
$ python -m uuid

# generera ett UUID med hjälp av uuid1()
$ python -m uuid -u uuid1

# generera ett UUID med hjälp av uuid5
$ python -m uuid -u uuid5 -n @url -N exempel.com

# generera 42 slumpmässiga UUID
$ python -m uuid -C 42