Generatore UUID
UUID Generato
Generatore UUID
Introduzione
Un Identificatore Universale Unico (UUID) è un numero a 128 bit utilizzato per identificare informazioni nei sistemi informatici. Gli UUID sono standardizzati dalla Open Software Foundation (OSF) come parte dell'Ambiente di Calcolo Distribuito (DCE). Questi identificatori sono progettati per essere unici sia nello spazio che nel tempo, rendendoli ideali per varie applicazioni nei sistemi distribuiti e oltre.
Questo strumento generatore di UUID consente di creare sia UUID di versione 1 (basati sul tempo) che UUID di versione 4 (random). Questi identificatori sono utili in vari scenari in cui è necessaria un'identificazione unica, come chiavi di database, sistemi distribuiti e protocolli di rete.
Come funzionano gli UUID
Struttura UUID
Un UUID è tipicamente rappresentato come 32 cifre esadecimali, visualizzate in cinque gruppi separati da trattini, nella forma 8-4-4-4-12 per un totale di 36 caratteri (32 caratteri alfanumerici e 4 trattini). Ad esempio:
550e8400-e29b-41d4-a716-446655440000
I 128 bit di un UUID sono suddivisi in campi specifici, ognuno dei quali porta informazioni diverse a seconda della versione dell'UUID:
- 32 bit per il campo time_low
- 16 bit per il campo time_mid
- 16 bit per il campo time_hi_and_version
- 8 bit per il campo clock_seq_hi_and_reserved
- 8 bit per il campo clock_seq_low
- 48 bit per il campo node
Ecco un diagramma che illustra la struttura dell'UUID:
Versioni UUID
Ci sono diverse versioni di UUID, ognuna con il proprio metodo di generazione:
- Versione 1 (Basata sul tempo): Utilizza il timestamp corrente e l'indirizzo MAC del computer.
- Versione 2 (Sicurezza DCE): Simile alla versione 1, ma include un identificatore di dominio locale.
- Versione 3 (Basata su nome, MD5): Generata tramite l'hashing di un identificatore di namespace e nome.
- Versione 4 (Random): Generata utilizzando un numero casuale o pseudo-casuale.
- Versione 5 (Basata su nome, SHA-1): Simile alla versione 3, ma utilizza l'hashing SHA-1.
Questo strumento si concentra sulla generazione di UUID di Versione 1 e Versione 4.
Formula
Generazione UUID di Versione 1
Gli UUID di Versione 1 vengono generati utilizzando i seguenti componenti:
- Timestamp: Un valore a 60 bit che rappresenta il numero di intervalli di 100 nanosecondi dal 15 ottobre 1582 (data della riforma gregoriana al calendario cristiano).
- Sequenza di clock: Un valore a 14 bit utilizzato per evitare duplicati nel caso in cui l'orologio venga impostato indietro.
- Nodo: Un valore a 48 bit, di solito derivato dall'indirizzo MAC del computer.
La formula per generare un UUID di Versione 1 può essere espressa come:
UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
Generazione UUID di Versione 4
Gli UUID di Versione 4 vengono generati utilizzando un generatore di numeri casuali crittograficamente sicuro. La formula è semplicemente:
UUID = random_128_bit_number
Con bit specifici impostati per indicare la versione (4) e la variante.
Casi d'uso
Gli UUID hanno numerose applicazioni in vari domini dell'informatica e dell'ingegneria del software:
-
Chiavi di database: Gli UUID vengono spesso utilizzati come chiavi primarie nei database, specialmente nei sistemi distribuiti dove più nodi potrebbero generare record simultaneamente.
-
Sistemi distribuiti: Nei grandi sistemi distribuiti, gli UUID aiutano a identificare in modo univoco risorse, transazioni o eventi attraverso più nodi o data center.
-
Indirizzamento dei contenuti: Gli UUID possono essere utilizzati per creare identificatori unici per contenuti nei sistemi di archiviazione a indirizzo di contenuto.
-
Gestione delle sessioni: Le applicazioni web spesso utilizzano UUID per gestire le sessioni utente, assicurando che ogni sessione abbia un identificatore unico.
-
Identificazione dei dispositivi IoT: Nelle applicazioni di Internet delle Cose (IoT), gli UUID possono essere utilizzati per identificare in modo univoco i singoli dispositivi in una rete.
Alternative
Sebbene gli UUID siano ampiamente utilizzati, ci sono approcci alternativi per generare identificatori unici:
-
ID auto-incrementali: Semplici e comunemente utilizzati nei sistemi a singolo database, ma non adatti per ambienti distribuiti.
-
ID basati su timestamp: Possono essere utili per dati ordinati nel tempo, ma potrebbero affrontare problemi di collisione in scenari di alta concorrenza.
-
ID Snowflake: Sviluppati da Twitter, questi ID combinano timestamp e numero di lavoratore per generare ID unici nei sistemi distribuiti.
-
ULID (Identificatore Universale Unico Lessicograficamente Ordinabile): Un'alternativa più recente che mira a essere più amichevole per l'uomo e ordinabile rispetto agli UUID.
Storia
Il concetto di UUID è stato introdotto per la prima volta nel sistema di calcolo di rete Apollo e successivamente standardizzato dalla Open Software Foundation (OSF) come parte dell'Ambiente di Calcolo Distribuito (DCE) negli anni '90. La specifica iniziale è stata pubblicata nel 1997 come ISO/IEC 11578:1996 e successivamente rivista nel 2005 come parte di ISO/IEC 9834-8:2005.
Punti salienti nella storia degli UUID:
- Anni '80: Apollo Computer sviluppa il concetto di UUID per il loro sistema di calcolo di rete.
- 1997: Prima specifica UUID pubblicata come ISO/IEC 11578:1996.
- 2005: Specifica UUID rivista e pubblicata come parte di ISO/IEC 9834-8:2005.
- 2009: RFC 4122 definisce il formato UUID e gli algoritmi di generazione utilizzati oggi.
Nel tempo, gli UUID sono diventati uno strumento essenziale nei sistemi distribuiti e nella progettazione di database, con varie implementazioni e adattamenti in diversi linguaggi di programmazione e piattaforme.
Esempi di codice
Ecco esempi di generazione di UUID in vari linguaggi di programmazione:
import uuid
## Genera un UUID di Versione 4 (random)
random_uuid = uuid.uuid4()
print(f"UUID di Versione 4: {random_uuid}")
## Genera un UUID di Versione 1 (basato sul tempo)
time_based_uuid = uuid.uuid1()
print(f"UUID di Versione 1: {time_based_uuid}")
Riferimenti
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- International Organization for Standardization. (2005). Information technology – Open Systems Interconnection – Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Identificatore universale unico. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- ID Snowflake. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec