Ogni versione UUID — da v1 a v8 — con diagrammi di struttura, casi d'uso, rischio di collisione ed esempi di codice JavaScript.
Struttura
timestamp (60-bit) + clock seq (14-bit) + MAC (48-bit)
Rischio di collisione
Very low
Vantaggi
Svantaggi
Meglio utilizzato per
Legacy systems. Avoid in new projects due to MAC address exposure.
Struttura
MD5(namespace UUID + name) → UUID
Rischio di collisione
MD5 collision risk (low for UUIDs)
Vantaggi
Svantaggi
Meglio utilizzato per
Generating UUIDs from URLs, email addresses, or other stable identifiers. Use v5 instead.
Struttura
122 random bits + 4-bit version + 2-bit variant
Rischio di collisione
Negligible (2^122 possibilities)
Vantaggi
Svantaggi
Meglio utilizzato per
Default choice for most applications. IDs for records, sessions, tokens.
Struttura
SHA-1(namespace UUID + name) → UUID (top 128 bits)
Rischio di collisione
SHA-1 — extremely low for UUID purposes
Vantaggi
Svantaggi
Meglio utilizzato per
Deterministic IDs from a namespace + name. Example: UUID for 'https://example.com' is always the same.
Struttura
Unix ms timestamp (48-bit) + version (4-bit) + random (74-bit)
Rischio di collisione
Very low (74 random bits)
Vantaggi
Svantaggi
Meglio utilizzato per
Database primary keys where sort order matters. Replaces v1 for time-ordered UUIDs.
Struttura
128 bits, content defined by the implementation
Rischio di collisione
Depends on implementation
Vantaggi
Svantaggi
Meglio utilizzato per
Experimental or vendor-specific use cases where v1–v7 don't fit.
| Version | Method | Sortable | Privacy-safe | Deterministic |
|---|---|---|---|---|
| v1 | Time + MAC | ✅ | ❌ (MAC leak) | ❌ |
| v3 | MD5 hash | ❌ | ✅ | ✅ |
| v4 | Random | ❌ | ✅ | ❌ |
| v5 | SHA-1 hash | ❌ | ✅ | ✅ |
| v7 | Time + Random | ✅ | ✅ | ❌ |
| v8 | Custom | — | — | — |
// JavaScript / Node.js (built-in, Node 15+)
import { randomUUID } from 'crypto';
const v4 = randomUUID(); // → "550e8400-e29b-41d4-a716-446655440000"
// Browser
const v4 = crypto.randomUUID();
// UUID v7 (npm: uuid package v10+)
import { v7 as uuidv7 } from 'uuid';
const v7 = uuidv7(); // → "018f0b2d-4c9e-7abc-89de-f012345678ab"
// Python
import uuid
v4 = str(uuid.uuid4()) # Random
v5 = str(uuid.uuid5(uuid.NAMESPACE_URL, 'https://example.com'))
# PostgreSQL
SELECT gen_random_uuid(); -- v4 (pg 13+)
SELECT uuid_generate_v4(); -- v4 (uuid-ossp extension)
SELECT gen_random_uuid()::text; -- as textUn UUID (Universally Unique Identifier) è un identificatore a 128 bit standardizzato in RFC 4122. È formattato come 8-4-4-4-12 caratteri esadecimali separati da trattini. Sono progettati per essere unici nello spazio e nel tempo senza un'autorità centrale.
Usa v4 per la maggior parte degli scopi generali — è generata casualmente e ha una probabilità di collisione estremamente bassa. Usa v7 se hai bisogno di UUID ordinati per tempo per chiavi primarie di database. Usa v5 per UUID deterministici da una coppia namespace+nome.
UUID v4 è puramente casuale (122 bit casuali). UUID v7 codifica un timestamp Unix nei primi 48 bit seguito da bit casuali. Questo rende gli UUID v7 ordinabili per tempo di creazione, migliorando significativamente le prestazioni dell'indice B-tree.
Praticamente sì. UUID v4 ha 122 bit casuali, dando 2^122 ≈ 5,3 × 10^36 valori possibili. Per avere il 50% di probabilità di collisione occorrerebbe generare circa 2,7 × 10^18 UUID.