Vai al contenuto principale

Generare valori UUID v5 deterministici

Un UUID versione 5 deriva da un UUID di namespace e da un nome tramite SHA-1. Chiunque calcoli l'hash dello stesso namespace e dello stesso nome ottiene esattamente lo stesso UUID, quindi gli ID si possono ricalcolare invece di salvarli.

Esempio svolto

Namespace (UUID)
DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
Nome
example.com
Risultato
cfbff0d1-9375-5685-968c-48ce8b15ae17
Namespace (UUID)
DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
Nome
Example.com
Risultato
a1feb884-07f5-5a14-8edb-cb659a7fbadc

Come funziona

  • I 16 byte del namespace vengono uniti ai byte UTF-8 del nome ed elaborati con SHA-1. I primi 16 byte del digest diventano l'UUID dopo aver impostato i bit di versione (5) e di variante.
  • La RFC 9562 predefinisce namespace per nomi DNS, URL, OID ISO e nomi distinti X.500. Qualsiasi UUID personale può fungere anche da namespace privato.
  • I nomi vengono confrontati byte per byte: maiuscole, spazi e barre finali cambiano il risultato, quindi normalizza prima i nomi. Poiché l'output è prevedibile, non usare mai un UUID v5 come segreto.
Versione UUID

Genera da 1 a 100 UUID alla volta

Namespace DNS: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 (predefinito)

Il nome da hash (ad es. nome di dominio, e-mail, ecc.)

Informazioni sugli UUID

UUID v1: UUID basati sul tempo che includono un timestamp e l'indirizzo MAC del computer che genera l'UUID. Utile quando è necessario sapere quando è stato creato l'UUID.

UUID v4: UUID generati casualmente. Questa è la versione più comunemente utilizzata e fornisce una buona unicità con una perdita minima di informazioni.

UUID v5: UUID basati sul nome utilizzando l'hashing SHA-1. Dato lo stesso namespace e nome, otterrai sempre lo stesso UUID. Utile per la generazione deterministica di UUID.

Altre guide agli UUID