Generare UUID (v1, v4, v5, v7)
- Dashboard
- Documentazione
- API
Perché usare UUID?
Gli UUID (Universally Unique Identifier) sono identificatori unici usati per garantire l'unicità attraverso diversi sistemi e database senza richiedere un coordinamento centrale. Sono comunemente usati nei sistemi distribuiti e nelle applicazioni web per generare identificatori unici per le risorse.
Versioni di UUID supportate
Questo strumento supporta le seguenti versioni di UUID:
- Versione 1: basata sul timestamp e sull'indirizzo MAC.
- Versione 4: generata in modo casuale (la più usata).
- Versione 5: basata su un'impronta SHA-1 di un namespace e un nome (deterministica: una stessa coppia namespace + nome produrrà sempre lo stesso UUID).
- Versione 7: ordinata temporalmente, raccomandata per chiavi primarie di database moderni (ordinamento lessicografico = ordinamento cronologico).
UUID v5: namespace e nome
Per generare un UUID v5, dovete scegliere un namespace standard e fornire un nome:
- DNS: da usare quando il nome è un nome di dominio (per esempio
cdrn.fr). - URL: da usare quando il nome è un URL (per esempio
https://cdrn.fr/). - OID: da usare quando il nome è un identificatore di oggetto ISO.
- X500: da usare quando il nome è un distinguished name X.500.
Essendo la generazione deterministica, l'UUID v5 è particolarmente adatto per produrre identificatori riproducibili a partire da un dato stabile.
Come generare UUID
Nella home page, potete generare UUID selezionando la versione desiderata in un menù a tendina e cliccando sul pulsante di generazione. Per la versione 5, indicate inoltre il namespace e il nome.
Non appena viene generato un UUID, apparirà in una riga di risultato verde che indica che è stato generato con successo. Se si verifica un errore, una riga rossa mostrerà il messaggio di errore corrispondente.
Esempi di codice per usare gli UUID generati
Potete usare gli UUID generati nelle vostre applicazioni integrandoli direttamente nel vostro codice. Ecco un esempio in PHP:
<?php
use Ramsey\Uuid\Uuid;
// Générer un UUID v4 (aléatoire)
$uuidV4 = Uuid::uuid4();
// Générer un UUID v5 (déterministe à partir d'un namespace et d'un nom)
$uuidV5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'cdrn.fr');
// Générer un UUID v7 (ordonnancé temporellement)
$uuidV7 = Uuid::uuid7();
echo "UUID v4 : " . $uuidV4->toString() . PHP_EOL;
echo "UUID v5 : " . $uuidV5->toString() . PHP_EOL;
echo "UUID v7 : " . $uuidV7->toString() . PHP_EOL;
?>
Validare e analizzare UUID
Potete anche validare e analizzare UUID esistenti per determinarne la versione e la validità. Ecco un esempio di codice in PHP:
<?php
use Ramsey\Uuid\Uuid;
// Valider un UUID
$uuidString = '123e4567-e89b-12d3-a456-426614174000';
if (Uuid::isValid($uuidString)) {
$uuid = Uuid::fromString($uuidString);
echo "UUID valide de version : " . $uuid->getFields()->getVersion();
} else {
echo "UUID invalide";
}
?>
Domande frequenti
Qual è la differenza tra UUID v1, v4, v5 e v7?
v1 combina un timestamp e l'indirizzo MAC della macchina, il che può rivelare informazioni sensibili. v4 è puramente casuale (122 bit di casualità), è la versione più usata. v5 è deterministica: una stessa coppia namespace + nome produce sempre lo stesso UUID grazie a un hash SHA-1. v7 integra un timestamp in millisecondi all'inizio dell'identificatore, il che lo rende ordinato cronologicamente e ideale per chiavi primarie.
Qual è la probabilità di collisione di un UUID v4?
Un UUID v4 dispone di 122 bit casuali, ossia circa 5,3 × 10^36 valori possibili. Per raggiungere il 50% di probabilità di collisione (paradosso del compleanno), bisognerebbe generare circa 2,7 × 10^18 UUID. In pratica, su un'applicazione standard, la probabilità di collisione è trascurabile. È ciò che permette di generare identificatori lato client senza coordinazione con un server centrale.
Perché privilegiare UUID v7 per una chiave primaria di database?
Un UUID v4 inserito in un indice B-tree provoca una forte frammentazione: ogni inserimento cade in una posizione casuale, il che degrada le performance e l'uso della cache. UUID v7 comincia con un timestamp in millisecondi, quindi le nuove righe si inseriscono sempre in fondo all'indice. Le performance di inserimento si avvicinano allora a quelle di un BIGSERIAL, mantenendo i vantaggi di un identificatore universale.
A cosa servono i namespace DNS, URL, OID e X500 di UUID v5?
Questi namespace sono UUID predefiniti nella RFC 4122 che agiscono come prefisso contestuale per la generazione deterministica. DNS si usa con un nome di dominio, URL con un URL completo, OID con un identificatore ISO di oggetto, X500 con un distinguished name LDAP. Potete anche definire il vostro namespace privato: un UUID v4 generato una volta per la vostra applicazione, riutilizzato come radice deterministica per tutti i vostri identificatori v5.
UUID o auto-incremento per gli identificatori in database?
L'auto-incremento resta molto efficace per database monolitici e rivela volentieri la sequenza di scrittura, il che può essere indesiderabile lato API pubblica. Gli UUID si addicono meglio alle architetture distribuite, alla generazione lato client, alle fusioni di database, e all'esposizione pubblica di identificatori opachi. Il compromesso ideale nel 2026: UUID v7 come chiave primaria, che combina universalità, opacità ragionevole e buone performance di indice.
Gli UUID generati transitano per un server terzo?
La generazione si effettua nell'ambiente di cdrn.fr, senza chiamate a servizi esterni. Per le versioni puramente casuali (v4) o temporali (v7), nessuna informazione sensibile è necessaria in input. Per la v5, il namespace e il nome che fornite servono unicamente al calcolo SHA-1 locale. Nessun identificatore generato viene loggato, potete usare lo strumento per produrre UUID destinati a contesti confidenziali.
Esempio di richiesta
curl -X POST https://cdrn.fr/api/v1/tools/uuid-generator/execute \
-H "Content-Type: application/json" \
-d '{"version":"uuid_version_1","quantity":3,"namespace":"namespace_dns","name":"..."}'
Schema di input
| Campo | Tipo | Richiesto | Predefinito |
|---|---|---|---|
version |
choice (uuid_version_1, uuid_version_4, uuid_version_5, uuid_version_7) | ✓ | – |
quantity |
integer | ✓ | 3 |
namespace |
choice (namespace_dns, namespace_url, namespace_oid, namespace_x500) | – | – |
name |
string | – | – |
Endpoint
GET https://cdrn.fr/api/v1/tools- elenca tutti gli strumenti disponibiliGET https://cdrn.fr/api/v1/tools/uuid-generator- recupera lo schema di questo strumentoPOST https://cdrn.fr/api/v1/tools/uuid-generator/execute- esegue questo strumento con un payload JSON