logo

Come generare UUID in Python

In questo tutorial, discuteremo come generare l'UUID in Python utilizzando il modulo uuid. Prima di approfondire questo argomento, comprendiamo il concetto di base dell'UUID.

introduzione

UUID è l'abbreviazione di identificatori universalmente univoci noto anche come GUID, ovvero identificatore univoco globale. È un numero ID lungo 128 bit per definire in modo univoco documenti, utenti, risorse o informazioni. Esistono varie versioni di UUID; ne discuteremo tutti nella prossima sezione.

  • L'UUID viene utilizzato per definire identificatori univoci nello spazio e nel tempo. Spazio e tempo significano che una volta generato l'UUID secondo lo standard, gli identificatori non possono duplicare le risorse esistenti.
  • L'UUID è l'opzione più adatta quando è richiesta l'unicità.
  • Svolge un ruolo essenziale nella crittografia e nell'applicazione di hashing.

Quando utilizzare l'UUID

Il modulo UUID può essere utilizzato nei seguenti scenari.

Nell'applicazione Web:

  • L'UUID ci aiuta a gestire lo stato generando un ID di sessione univoco.
  • In genere, utilizziamo i valori di incremento automatico per generare ID utente. È un approccio abbastanza semplice e facile da indovinare. Tuttavia, gli UUID sono difficili da indovinare perché non vengono creati consecutivamente.

Nel sistema di database

trovare numeri bloccati su Android
  • Fornisce un vantaggio significativo nel database perché l'UUID è indipendente dall'ambiente. Significa che possiamo creare un UUID su qualsiasi macchina utilizzando qualsiasi applicazione.
  • La maggior parte delle applicazioni dipende dal server del database per generare la chiave univoca o primaria. L'UUID è una buona opzione per generare una chiave di database univoca che ci aiuta a cambiare l'approccio di generazione delle chiavi nel database.
  • L'UUID è un valore reale, non uno pseudovalore come un numero in una tabella SQL.

Modulo uuid Python

Il modulo Python uuid è implementato secondo RFC 4122, uno standard e Copyright © della società Internet. Con l'aiuto del modulo UUID Python, possiamo generare UUID in vari tipi come UUID versione 1, 3, 4 e 5. Il modulo Python supporta le seguenti versioni di UUID.

    UUID1-Genera il numero univoco utilizzando l'indirizzo MAC e il componente dell'ora corrente.UUID4-Utilizza generatori di numeri pseudo-casuali per generare UUID e tali tipi di UUID sono utili da utilizzare a fini di sicurezza.UUID3 e UUID5 -Utilizza l'hashing crittografico e le stringhe di testo fornite dall'applicazione per generare l'UUID.

Genera UUID utilizzando il modulo UUID Python

Generiamo gli UUID di varie versioni utilizzando il modulo uuid di Python.

Utilizzando uuid1() - Per generare l'uuid, dobbiamo importare il modulo uuid e quindi chiamare il metodo uuid1(). Comprendiamo il seguente esempio.

Esempio 1

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

Produzione:

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

Struttura dell'UUID

Come possiamo vedere, ci sono cinque componenti nell'UUID sopra e ciascun componente ha la stessa lunghezza. La struttura dell'UUID è nel formato '8-4-4-4-12'.

La rappresentazione della stringa UUID è riportata di seguito:

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

Analizziamo i campi sopra degli UUID

    tempo_basso -Sono i primi 32 bit di ID.tempo_metà -Sono i successivi 16 bit di ID.time_high_and_version -Sono i successivi 16 bit di ID.clock_seq_hi_variant:Sono i successivi 8 bit di ID.clock_seq_low:Sono i successivi 8 bit di ID.nodo:Sono gli ultimi 48 bit di ID.tempo :È un campo componente temporale di id.sequenza_orologio:È un numero di sequenza di 14 bit.

Comprendiamo un altro esempio di generazione di UUID in vari formati come byte, int ed esadecimale.

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

Produzione:

 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 

Svantaggi dell'UUID1

: in Java

L'UUID1 è associato all'indirizzo MAC del computer e quindi può rappresentare una minaccia per la privacy. Tuttavia, fornisce completa unicità.

Metodo 2: utilizzare uuid4()

Questo metodo genera numeri casuali con la garanzia di proteggere la privacy. Comprendiamo il seguente esempio.

Esempio -

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

Produzione:

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

uuid1() contro uuid4

IL uuid1() fornisce la garanzia di non produrre alcuna collisione. Possiamo creare duplicati di UUID creando più di 16384 uuid1 in meno di 100 ns. Non fornisce la garanzia di proteggere la privacy. IL uuid1() non è consigliato se non desideri visualizzare gli indirizzi MAC del tuo computer.

Il metodo uuid4() genera UUID casuale utilizzando i generatori di numeri sicuri generati crittograficamente. Genera UUID più sicuri. È consigliato quando è necessario generare UUID su macchine separate.

registrare la memoria

UUID 3 e UUID 5 per creare un UUID basato sul nome

L'UUID basato sul nome significa che possiamo generare UUID utilizzando l'UUID della versione 3 o 5.

Possiamo utilizzare nomi e spazi dei nomi per creare una serie di UUID univoci. Le versioni 3 e 5 eseguono l'hashing dell'identificatore dello spazio dei nomi con un nome.

IL uuid3() Il metodo genera un UUID basato sull'hash MD5 dell'identificatore dello spazio dei nomi e su una stringa. D'altra parte, il metodo uuid5() genera UUID basato sulla tecnica di hashing SHA-1 di un identificatore dello spazio dei nomi.

Di seguito sono riportati gli identificatori degli spazi dei nomi definiti da uuid3() o uuid5().

    NAMESPACE_DNS -Rappresenta un nome di dominio tradizionale. Ad esempio, https://javatpoint.com.NAMESPACE_URL -Rappresenta un URL.NAMESPACE_OID -In questo spazio dei nomi è specificata la stringa ISO OID.SPAZIO NOME_X500 -Quando viene specificato questo spazio dei nomi, la stringa del nome è un DN X.500 in DER o un formato di output testo.

Comprendiamo il seguente esempio per generare UUID3 e UUID5 utilizzando i vari nomi host e spazi dei nomi.

Esempio -

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

Produzione:

 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 

Esempio: 2: genera UUID 3 e UUID 5 utilizzando uno spazio dei nomi diverso

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

Produzione:

 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 

Il comportamento di uuid3 e uuid5

  • Nonostante lo stesso spazio dei nomi e lo stesso nome siano simili, gli UUID vengono generati in momenti diversi.
  • Due spazi dei nomi diversi nello stesso spazio dei nomi sono diversi, generano ID univoci.

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

Produzione:

 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 

Come convertire la stringa in UUID e l'UUID in stringa in Python?

IL uuid.uuid1() Il metodo restituisce l'istanza della classe UUID. Possiamo ottenere la rappresentazione in stringa dell'UUID utilizzando il file str() metodo. Il formato della stringa corrispondente può essere utilizzato per il confronto o la manipolazione. Comprendiamo il seguente esempio.

Esempio -

 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) 

Produzione:

elimina l'ultimo commit git
 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 

Ora creeremo l'UUID da String.

A volte, otteniamo l'UUID in formato stringa. E la nostra applicazione deve convertirlo nell'istanza della classe UUID per alcune applicazioni. Comprendiamo il seguente esempio per convertire l'UUID in formato stringa.

Esempio -

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

Produzione:

L'attrice Rakul Preet Singh
 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 

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

Produzione:

 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 

Genera UUID riproducibili

Come accennato in precedenza, l'UUID ha vari attributi. Possiamo utilizzare lo stesso UUID utilizzando uno qualsiasi dei suoi attributi. Usando il modulo uuid , possiamo generare lo stesso uuid in qualsiasi momento utilizzando il valore seed. Il valore seed può essere utilizzato anche per generare lo stesso UUID. Comprendiamo entrambi i concetti.

I seguenti input possono essere utilizzati per creare un'istanza UUID.

  • Corda
  • Byte
  • Byte_le
  • Campi
  • int

Utilizzando uno qualsiasi dei valori sopra indicati, è possibile generare l'UUID. Vediamo l'esempio seguente in cui utilizziamo tutti questi valori dello stesso UUID.

Esempio -

 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) 

Produzione:

 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 

Riproduci l'UUID con il seme

Come suggerisce il nome, il modulo Faker genera per noi dati falsi. Abbiamo utilizzato il modulo fake per generare ripetutamente lo stesso UUID. Comprendiamo il seguente esempio.

Esempio -

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

Produzione:

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

Conclusione

In questo tutorial, abbiamo discusso in dettaglio il modulo uuid e abbiamo capito come possiamo generare i vari UUID. Gli UUID ci aiutano a definire l'unicità nell'applicazione/database e aiutano anche a definire identificatori per documenti, host, applicazione, client e altre situazioni.