uuid — UUID-Objekte gemäß RFC 9562

Quellcode: Lib/uuid.py


Dieses Modul bietet unveränderliche UUID-Objekte (die Klasse UUID) und Funktionen zur Erzeugung von UUIDs, die einer bestimmten UUID-Version entsprechen, wie in RFC 9562 (der RFC 4122 ablöst) spezifiziert, z. B. uuid1() für UUID-Version 1, uuid3() für UUID-Version 3 usw. Beachten Sie, dass UUID-Version 2 absichtlich weggelassen wird, da sie außerhalb des Umfangs der RFC liegt.

Wenn Sie nur eine eindeutige ID benötigen, sollten Sie wahrscheinlich uuid1() oder uuid4() aufrufen. Beachten Sie, dass uuid1() die Privatsphäre beeinträchtigen kann, da es eine UUID erzeugt, die die Netzwerkadresse des Computers enthält. uuid4() erzeugt eine zufällige UUID.

Abhängig von der Unterstützung durch die zugrunde liegende Plattform kann uuid1() eine "sichere" UUID zurückgeben oder auch nicht. Eine sichere UUID ist eine, die mithilfe von Synchronisationsmethoden generiert wurde, die sicherstellen, dass keine zwei Prozesse dieselbe UUID erhalten. Alle Instanzen von UUID haben ein Attribut is_safe, das Informationen über die Sicherheit der UUID über diese Aufzählung weitergibt.

class uuid.SafeUUID

Hinzugefügt in Version 3.7.

safe

Die UUID wurde von der Plattform auf eine Multiprocessing-sichere Weise generiert.

unsafe

Die UUID wurde nicht auf eine Multiprocessing-sichere Weise generiert.

unknown

Die Plattform liefert keine Informationen darüber, ob die UUID sicher generiert wurde oder nicht.

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

Erstellt eine UUID aus einer Zeichenkette mit 32 Hexadezimalziffern, einer Zeichenkette mit 16 Bytes in Big-Endian-Reihenfolge als Argument bytes, einer Zeichenkette mit 16 Bytes in Little-Endian-Reihenfolge als Argument bytes_le, einem Tupel aus sechs Ganzzahlen (32-Bit time_low, 16-Bit time_mid, 16-Bit time_hi_version, 8-Bit clock_seq_hi_variant, 8-Bit clock_seq_low, 48-Bit node) als Argument fields oder einer einzelnen 128-Bit-Ganzzahl als Argument int. Wenn eine Zeichenkette mit Hex-Ziffern angegeben wird, sind geschweifte Klammern, Bindestriche und ein URN-Präfix optional. Zum Beispiel ergeben diese Ausdrücke alle dieselbe 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)

Genau eines der Argumente hex, bytes, bytes_le, fields oder int muss angegeben werden. Das Argument version ist optional; wenn es angegeben wird, hat die resultierende UUID ihre Variante und Versionsnummer gemäß RFC 9562 gesetzt, wobei Bits in den angegebenen hex, bytes, bytes_le, fields oder int überschrieben werden.

Der Vergleich von UUID-Objekten erfolgt durch den Vergleich ihrer Attribute UUID.int. Der Vergleich mit einem Nicht-UUID-Objekt löst einen TypeError aus.

str(uuid) gibt eine Zeichenkette im Format 12345678-1234-5678-1234-567812345678 zurück, wobei die 32 Hexadezimalziffern die UUID darstellen.

UUID-Instanzen haben die folgenden schreibgeschützten Attribute

UUID.bytes

Die UUID als 16-Byte-Zeichenkette (enthält die sechs Ganzzahlfelder in Big-Endian-Byte-Reihenfolge).

UUID.bytes_le

Die UUID als 16-Byte-Zeichenkette (mit time_low, time_mid und time_hi_version in Little-Endian-Byte-Reihenfolge).

UUID.fields

Ein Tupel der sechs Ganzzahlfelder der UUID, die auch als sechs einzelne Attribute und zwei abgeleitete Attribute verfügbar sind.

Feld

Bedeutung

UUID.time_low

Die ersten 32 Bits der UUID. Nur relevant für Version 1.

UUID.time_mid

Die nächsten 16 Bits der UUID. Nur relevant für Version 1.

UUID.time_hi_version

Die nächsten 16 Bits der UUID. Nur relevant für Version 1.

UUID.clock_seq_hi_variant

Die nächsten 8 Bits der UUID. Nur relevant für die Versionen 1 und 6.

UUID.clock_seq_low

Die nächsten 8 Bits der UUID. Nur relevant für die Versionen 1 und 6.

UUID.node

Die letzten 48 Bits der UUID. Nur relevant für Version 1.

UUID.time

Der 60-Bit-Zeitstempel als Anzahl von 100-Nanosekunden-Intervallen seit der gregorianischen Epoche (1582-10-15 00:00:00) für die Versionen 1 und 6 oder der 48-Bit-Zeitstempel in Millisekunden seit der Unix-Epoche (1970-01-01 00:00:00) für Version 7.

UUID.clock_seq

Die 14-Bit-Sequenznummer. Nur relevant für die Versionen 1 und 6.

UUID.hex

Die UUID als 32-stellige hexadezimale Kleinbuchstaben-Zeichenkette.

UUID.int

Die UUID als 128-Bit-Ganzzahl.

UUID.urn

Die UUID als URN, wie in RFC 9562 spezifiziert.

UUID.variant

Die UUID-Variante, die das interne Layout der UUID bestimmt. Dies wird eine der Konstanten RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT oder RESERVED_FUTURE sein.

UUID.version

Die UUID-Versionsnummer (1 bis 8, nur aussagekräftig, wenn die Variante RFC_4122 ist).

Geändert in Version 3.14: UUID-Versionen 6, 7 und 8 hinzugefügt.

UUID.is_safe

Eine Aufzählung von SafeUUID, die angibt, ob die Plattform die UUID auf eine Multiprocessing-sichere Weise generiert hat.

Hinzugefügt in Version 3.7.

Das Modul uuid definiert die folgenden Funktionen

uuid.getnode()

Ruft die Hardwareadresse als 48-Bit-Positive Ganzzahl ab. Wenn dies zum ersten Mal ausgeführt wird, kann ein separates Programm gestartet werden, was sehr langsam sein kann. Wenn alle Versuche, die Hardwareadresse zu erhalten, fehlschlagen, wählen wir eine zufällige 48-Bit-Zahl mit dem Multicast-Bit (niederwertigstes Bit des ersten Oktetts) auf 1 gesetzt, wie in RFC 4122 empfohlen. "Hardwareadresse" bedeutet die MAC-Adresse einer Netzwerkschnittstelle. Auf einem Rechner mit mehreren Netzwerkschnittstellen werden universell verwaltete MAC-Adressen (d. h. bei denen das zweite niederwertigste Bit des ersten Oktetts *nicht* gesetzt ist) gegenüber lokal verwalteten MAC-Adressen bevorzugt, jedoch ohne weitere Ordnungsgarantien.

Geändert in Version 3.7: Universell verwaltete MAC-Adressen werden gegenüber lokal verwalteten MAC-Adressen bevorzugt, da erstere garantiert global eindeutig sind, letztere jedoch nicht.

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

Erzeugt eine UUID aus einer Host-ID, einer Sequenznummer und der aktuellen Zeit gemäß RFC 9562, §5.1.

Wenn node nicht angegeben ist, wird getnode() verwendet, um die Hardwareadresse als 48-Bit-Positive Ganzzahl zu erhalten. Wenn keine Sequenznummer clock_seq angegeben ist, wird eine pseudo-zufällige 14-Bit-Positive Ganzzahl generiert.

Wenn node oder clock_seq ihre erwartete Bitanzahl überschreiten, werden nur ihre niederwertigsten Bits beibehalten.

uuid.uuid3(namespace, name)

Erzeugt eine UUID basierend auf dem MD5-Hash einer Namespace-Identifikation (die eine UUID ist) und einem Namen (der ein bytes-Objekt oder eine Zeichenkette ist, die mit UTF-8 kodiert wird) gemäß RFC 9562, §5.3.

uuid.uuid4()

Erzeugt eine zufällige UUID auf kryptographisch sichere Weise gemäß RFC 9562, §5.4.

uuid.uuid5(namespace, name)

Erzeugt eine UUID basierend auf dem SHA-1-Hash einer Namespace-Identifikation (die eine UUID ist) und einem Namen (der ein bytes-Objekt oder eine Zeichenkette ist, die mit UTF-8 kodiert wird) gemäß RFC 9562, §5.5.

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

Erzeugt eine UUID aus einer Sequenznummer und der aktuellen Zeit gemäß RFC 9562, §5.6.

Dies ist eine Alternative zu uuid1(), um die Datenbanklokalität zu verbessern.

Wenn node nicht angegeben ist, wird getnode() verwendet, um die Hardwareadresse als 48-Bit-Positive Ganzzahl zu erhalten. Wenn keine Sequenznummer clock_seq angegeben ist, wird eine pseudo-zufällige 14-Bit-Positive Ganzzahl generiert.

Wenn node oder clock_seq ihre erwartete Bitanzahl überschreiten, werden nur ihre niederwertigsten Bits beibehalten.

Hinzugefügt in Version 3.14.

uuid.uuid7()

Erzeugt eine zeitbasierte UUID gemäß RFC 9562, §5.7.

Für die Portabilität über Plattformen hinweg, die keine Sub-Millisekunden-Präzision haben, betten die von dieser Funktion erzeugten UUIDs einen 48-Bit-Zeitstempel ein und verwenden einen 42-Bit-Zähler, um die Monotonie innerhalb einer Millisekunde zu gewährleisten.

Hinzugefügt in Version 3.14.

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

Erzeugt eine Pseudo-Zufalls-UUID gemäß RFC 9562, §5.8.

Wenn angegeben, werden die Parameter a, b und c als positive Ganzzahlen von 48, 12 bzw. 62 Bits erwartet. Wenn sie ihre erwartete Bitanzahl überschreiten, werden nur ihre niederwertigsten Bits beibehalten; nicht angegebene Argumente werden durch eine Pseudo-Zufalls-Ganzzahl von angemessener Größe ersetzt.

Standardmäßig werden a, b und c nicht von einem kryptographisch sicheren Pseudo-Zufallszahlengenerator (CSPRNG) generiert. Verwenden Sie uuid4(), wenn eine UUID in einem sicherheitskritischen Kontext verwendet werden muss.

Hinzugefügt in Version 3.14.

Das Modul uuid definiert die folgenden Namespace-Identifikatoren zur Verwendung mit uuid3() oder uuid5().

uuid.NAMESPACE_DNS

Wenn dieser Namespace angegeben ist, ist die Zeichenkette name ein vollqualifizierter Domainname.

uuid.NAMESPACE_URL

Wenn dieser Namespace angegeben ist, ist die Zeichenkette name eine URL.

uuid.NAMESPACE_OID

Wenn dieser Namespace angegeben ist, ist die Zeichenkette name eine ISO OID.

uuid.NAMESPACE_X500

Wenn dieser Namespace angegeben ist, ist die Zeichenkette name eine X.500 DN im DER- oder Textausgabeformat.

Das Modul uuid definiert die folgenden Konstanten für die möglichen Werte des Attributs variant.

uuid.RESERVED_NCS

Reserviert für NCS-Kompatibilität.

uuid.RFC_4122

Gibt das in RFC 4122 angegebene UUID-Layout an. Diese Konstante wird aus Kompatibilitätsgründen beibehalten, obwohl RFC 4122 durch RFC 9562 abgelöst wurde.

uuid.RESERVED_MICROSOFT

Reserviert für Microsoft-Kompatibilität.

uuid.RESERVED_FUTURE

Reserviert für zukünftige Definitionen.

Das Modul uuid definiert die speziellen Nil- und Max-UUID-Werte.

uuid.NIL

Eine spezielle Form einer UUID, die gemäß RFC 9562, §5.9 so spezifiziert ist, dass alle 128 Bits auf Null gesetzt sind.

Hinzugefügt in Version 3.14.

uuid.MAX

Eine spezielle Form einer UUID, die gemäß RFC 9562, §5.10 so spezifiziert ist, dass alle 128 Bits auf Eins gesetzt sind.

Hinzugefügt in Version 3.14.

Siehe auch

RFC 9562 - Ein URN-Namespace für universell eindeutige Identifikatoren (UUID)

Diese Spezifikation definiert einen Uniform Resource Name (URN)-Namespace für UUIDs, das interne Format von UUIDs und Methoden zur Generierung von UUIDs.

Befehlszeilenverwendung

Hinzugefügt in Version 3.12.

Das Modul uuid kann vom Befehlszeilenfenster aus ausgeführt werden.

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

Die folgenden Optionen werden akzeptiert:

-h, --help

Zeigt die Hilfemeldung an und beendet das Programm.

-u <uuid>
--uuid <uuid>

Gibt den Namen der zu verwendenden Funktion zur Generierung der UUID an. Standardmäßig wird uuid4() verwendet.

Geändert in Version 3.14: Generierung von UUID-Versionen 6, 7 und 8 erlaubt.

-n <namespace>
--namespace <namespace>

Der Namespace ist eine UUID oder @ns, wobei ns eine gut bekannte vordefinierte UUID ist, die nach dem Namespace-Namen angesprochen wird. Wie z. B. @dns, @url, @oid und @x500. Nur erforderlich für die Funktionen uuid3() / uuid5().

-N <name>
--name <name>

Der Name, der als Teil der Erzeugung der UUID verwendet wird. Nur erforderlich für die Funktionen uuid3() / uuid5().

-C <num>
--count <num>

Generiert num neue UUIDs.

Hinzugefügt in Version 3.14.

Beispiel

Hier sind einige Beispiele für typische Verwendungen des Moduls 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')

Beispiel für die Befehlszeile

Hier sind einige Beispiele für typische Verwendungen der Befehlszeilenschnittstelle von uuid.

# generate a random UUID - by default uuid4() is used
$ python -m uuid

# generate a UUID using uuid1()
$ python -m uuid -u uuid1

# generate a UUID using uuid5
$ python -m uuid -u uuid5 -n @url -N example.com

# generate 42 random UUIDs
$ python -m uuid -C 42