logo

So generieren Sie eine UUID in Python

In diesem Tutorial besprechen wir, wie man die UUID in Python mithilfe des uuid-Moduls generiert. Bevor wir uns mit diesem Thema befassen, wollen wir das Grundkonzept der UUID verstehen.

Einführung

UUID ist ein Abkürzungsname für universell eindeutige Identifikatoren auch bekannt als GUID, d. h. Globally Unique Identifier. Dabei handelt es sich um eine 128 Bit lange ID-Nummer zur eindeutigen Definition von Dokumenten, Benutzern, Ressourcen oder Informationen. Es gibt verschiedene Versionen von UUIDs; Wir werden sie alle im nächsten Abschnitt besprechen.

  • Die UUID wird verwendet, um räumlich und zeitlich eindeutige Kennungen zu definieren. Raum und Zeit bedeuten, dass Identifikatoren, sobald die UUID gemäß dem Standard generiert wurde, nicht mehr mit vorhandenen Ressourcen dupliziert werden können.
  • Die UUID ist die am besten geeignete Option, wenn Eindeutigkeit erforderlich ist.
  • Es spielt eine wesentliche Rolle in der Kryptographie und Hashing-Anwendung.

Wann UUID verwendet werden sollte

Das UUID-Modul kann in den folgenden Szenarien verwendet werden.

In der Webanwendung -

  • Die UUID hilft uns, den Status durch Generierung zu verwalten eine eindeutige Sitzungs-ID.
  • Im Allgemeinen verwenden wir die Werte für die automatische Erhöhung, um Benutzer-IDs zu generieren. Es ist ein recht unkomplizierter Ansatz und leicht zu erraten. Allerdings sind UUIDs schwer zu erraten, da sie nicht nacheinander erstellt werden.

Im Datenbanksystem

Regalhunde
  • Dies bietet einen erheblichen Vorteil in der Datenbank, da die UUID umgebungsunabhängig ist. Das bedeutet, dass wir mit jeder Anwendung auf jedem Computer eine UUID erstellen können.
  • Die meisten Anwendungen sind darauf angewiesen, dass der Datenbankserver den eindeutigen oder Primärschlüssel generiert. UUID ist eine gute Option zum Generieren eines eindeutigen Datenbankschlüssels, der uns dabei hilft, den Schlüsselgenerierungsansatz in der Datenbank zu ändern.
  • Die UUID ist ein realer Wert, kein Pseudowert wie eine Zahl in einer SQL-Tabelle.

Python-UUID-Modul

Das Python-UUID-Modul ist gemäß RFC 4122 implementiert, einem Standard und Copyright © der Internet Society. Mit Hilfe des Python-UUID-Moduls können wir UUIDs in verschiedenen Typen generieren, z. B. UUIDs der Versionen 1, 3, 4 und 5. Das Python-Modul unterstützt die folgenden Versionen von UUID.

    UUID1 -Es generiert die eindeutige Nummer anhand der MAC-Adresse und der aktuellen Zeitkomponente.UUID4 -Zur Generierung von UUIDs werden Pseudozufallszahlengeneratoren verwendet, und solche UUID-Typen eignen sich aus Sicherheitsgründen gut.UUID3 und UUID5 -Es verwendet kryptografisches Hashing und von der Anwendung bereitgestellte Textzeichenfolgen, um UUID zu generieren.

Generieren Sie eine UUID mit dem Python-UUID-Modul

Lassen Sie uns die UUIDs verschiedener Versionen mithilfe des Python-UUID-Moduls generieren.

Verwenden von uuid1() - Um die UUID zu generieren, müssen wir das UUID-Modul importieren und dann die Methode uuid1() aufrufen. Lassen Sie uns das folgende Beispiel verstehen.

Beispiel 1

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

Ausgabe:

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

Struktur der UUID

Wie wir sehen können, gibt es in der obigen UUID fünf Komponenten und jede Komponente hat die gleiche Länge. Die Struktur der UUID hat das Format „8-4-4-4-12“.

Die UUID-String-Darstellung ist unten angegeben:

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

Lassen Sie uns die oben genannten UUID-Felder aufschlüsseln

    time_low -Es handelt sich um die ersten 32 Bit der ID.time_mid -Es sind die nächsten 16 Bits der ID.time_high_and_version -Es sind die nächsten 16 Bits der ID.clock_seq_hi_variant:Es handelt sich um die nächsten 8 Bits der ID.clock_seq_low:Es handelt sich um die nächsten 8 Bits der ID.Knoten:Es handelt sich um die letzten 48 Bit der ID.Zeit :Es ist ein Zeitkomponentenfeld der ID.clock_seq:Es handelt sich um eine 14-Bit-Sequenznummer.

Lassen Sie uns ein weiteres Beispiel für die Generierung von UUIDs in verschiedenen Formaten wie Bytes, Int und Hex verstehen.

Beispiel – 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) 

Ausgabe:

 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 

Nachteile von UUID1

Die UUID1 ist mit der MAC-Adresse des Computers verknüpft und kann daher eine Bedrohung für die Privatsphäre darstellen. Es bietet jedoch völlige Einzigartigkeit.

Methode 2: Verwendung von uuid4()

Diese Methode generiert Zufallszahlen mit der Garantie, die Privatsphäre zu schützen. Lassen Sie uns das folgende Beispiel verstehen.

Heilwerkzeug Gimp

Beispiel -

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

Ausgabe:

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

uuid1() vs. uuid4

Der uuid1() bietet die Sicherheit, keine Kollision zu verursachen. Wir können Duplikate von UUIDs erstellen, indem wir mehr als 16384 uuid1 in weniger als 100 ns erstellen. Es bietet keine Garantie für den Schutz der Privatsphäre. Der uuid1() wird nicht empfohlen, wenn Sie die MAC-Adressen Ihres Computers nicht sehen möchten.

Die Methode uuid4() generiert zufällige UUIDs mithilfe der kryptografisch generierten sicheren Nummerngeneratoren. Es generiert sicherere UUIDs. Dies wird empfohlen, wenn UUIDs auf separaten Maschinen generiert werden müssen.

UUID 3 und UUID 5 zum Erstellen einer namensbasierten UUID

Die namensbasierte UUID bedeutet, dass wir UUIDs mit UUID der Version 3 oder 5 generieren können.

Wir können Namen und Namespaces verwenden, um eine Reihe eindeutiger UUIDs zu erstellen. In Version 3 und 5 wird die Namespace-ID mit einem Namen gehasht.

Der uuid3() Die Methode generiert eine UUID, die auf dem MD5-Hash der Namespace-ID und einer Zeichenfolge basiert. Andererseits generiert die Methode uuid5() eine UUID basierend auf der SHA-1-Hashing-Technik einer Namespace-ID.

Linux Mint Cinnamon vs. Mate

Unten sind die Namespace-IDs aufgeführt, die durch uuid3() oder uuid5() definiert werden.

    NAMESPACE_DNS -Es handelt sich um einen traditionellen Domainnamen. Zum Beispiel https://javatpoint.com.NAMESPACE_URL -Es stellt eine URL dar.NAMESPACE_OID -Für diesen Namespace wird die Zeichenfolge ISO OID angegeben.NAMESPACE_X500 -Wenn dieser Namespace angegeben wird, ist die Namenszeichenfolge ein X.500-DN in DER oder ein Textausgabeformat.

Lassen Sie uns das folgende Beispiel verstehen, um UUID3 und UUID5 unter Verwendung der verschiedenen Hostnamen und Namespaces zu generieren.

Beispiel -

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

Ausgabe:

 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 

Beispiel – 2: Generieren Sie UUID 3 und UUID 5 mit einem anderen Namespace

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

Ausgabe:

 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 

Das Verhalten von uuid3 und uuid5

  • Obwohl der gleiche Namespace und der gleiche Name ähnlich sind, werden UUIDs zu unterschiedlichen Zeiten generiert.
  • Wenn zwei verschiedene Namespaces im selben Namespace unterschiedlich sind, werden eindeutige IDs generiert.

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

Ausgabe:

 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 

Wie konvertiere ich einen String in UUID und UUID in einen String in Python?

Der uuid.uuid1() Die Methode gibt die Instanz der UUID-Klasse zurück. Mit dem können wir eine String-Darstellung der UUID erhalten str() Methode. Das entsprechende String-Format kann zum Vergleich oder zur Manipulation verwendet werden. Lassen Sie uns das folgende Beispiel verstehen.

Beispiel -

 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) 

Ausgabe:

 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 

Jetzt erstellen wir eine UUID aus String.

Konvertieren eines Objekts in einen String

Manchmal erhalten wir die UUID im String-Format. Und unsere Anwendung muss es für einige Anwendungen in die UUID-Klasseninstanz konvertieren. Lassen Sie uns das folgende Beispiel verstehen, um eine UUID im String-Format zu konvertieren.

Beispiel -

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

Ausgabe:

list.sort Java
 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 

Beispiel – 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) 

Ausgabe:

 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 

Generieren Sie reproduzierbare UUIDs

Wie bereits erwähnt, verfügt die UUID über verschiedene Attribute. Wir können dieselbe UUID mit jedem ihrer Attribute verwenden. Verwendung der UUID-Modul , wir können dasselbe generieren uuid jederzeit mit dem Startwert. Der Seed-Wert kann auch zum Generieren derselben UUID verwendet werden. Lassen Sie uns beide Konzepte verstehen.

Die folgenden Eingaben können zum Erstellen einer UUID-Instanz verwendet werden.

  • Zeichenfolge
  • Bytes
  • Bytes_le
  • Felder
  • int

Mit einem der oben genannten Werte kann die UUID generiert werden. Sehen wir uns das folgende Beispiel an, in dem wir alle diese Werte derselben UUID verwenden.

Beispiel -

 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) 

Ausgabe:

 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 

UUID mit Seed reproduzieren

Wie der Name schon sagt, generiert das Faker-Modul gefälschte Daten für uns. Wir haben das Faker-Modul verwendet, um wiederholt dieselbe UUID zu generieren. Lassen Sie uns das folgende Beispiel verstehen.

Beispiel -

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

Ausgabe:

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

Abschluss

In diesem Tutorial haben wir das UUID-Modul ausführlich besprochen und verstanden, wie wir die verschiedenen UUIDs generieren können. UUIDs helfen uns, die Einzigartigkeit in der Anwendung/Datenbank zu definieren und auch dabei, Identifikatoren für Dokumente, Hosts, Anwendungen, Clients und andere Situationen zu definieren.