Generatore UUID Online: Crea Identificatori Univoci Gratuiti

Cos’è un UUID?

Un UUID (Universally Unique Identifier) è un identificatore a 128 bit utilizzato nei sistemi informatici per identificare in modo univoco le informazioni. L’UUID è standardizzato secondo RFC 4122 e, grazie alla sua enorme entropia, garantisce una probabilità di collisione praticamente nulla – ciò significa che due UUID generati indipendentemente saranno quasi certamente unici.

L’UUID ha un formato standard: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, dove ogni x è una cifra esadecimale (0-9, a-f), M indica la versione dell’UUID e N indica la variante.

Versioni di UUID

UUID v1 (Timestamp + indirizzo MAC)

UUID v1 si basa sul timestamp corrente e su un valore casuale (nel browser, invece dell’indirizzo MAC). Utilizza intervalli di 100 nanosecondi a partire dal 15 ottobre 1582 (Calendario Gregoriano).

Utilizzo:

  • Situazioni in cui è necessario ordinare gli UUID cronologicamente
  • Debugging e logging (l’UUID contiene informazioni sul tempo di creazione)
  • Sistemi distribuiti con sincronizzazione temporale

Esempio: 6ba7b810-9dad-11d1-80b4-00c04fd430c8

Vantaggi:

  • Gli UUID possono essere ordinati cronologicamente in base al tempo di creazione
  • Utile per audit e debugging
  • Contiene informazioni sul timestamp

Svantaggi:

  • Potenziale rischio per la sicurezza – contiene il timestamp
  • Nel browser non contiene l’indirizzo MAC effettivo (sostituito da un valore casuale)
  • Scarsa località del DB (il timestamp è nei bit di ordine inferiore)

UUID v3 (Hash MD5)

UUID v3 è generato utilizzando l’hash MD5 del namespace UUID e del nome. Deterministico – lo stesso namespace + nome genererà sempre lo stesso UUID.

Utilizzo:

  • Conversione di URL, nomi DNS o altri identificatori in UUID
  • Situazioni in cui sono necessari UUID riproducibili
  • Mappatura tra diversi sistemi di identificazione

Esempio: a3bb189e-8bf9-3888-9912-ace4e6543002

Vantaggi:

  • Deterministico (stesso input = stesso output)
  • Ideale per la conversione di identificatori noti
  • Nessuna collisione per input diversi

Svantaggi:

  • MD5 è un algoritmo obsoleto (preferire v5)
  • Richiede namespace e nome
  • Impossibile recuperare l’input originale

UUID v4 (Casuale) - RACCOMANDATO

La versione di UUID più utilizzata. UUID v4 è generato puramente in modo casuale utilizzando un generatore di numeri casuali crittograficamente sicuro (crypto.getRandomValues()).

Utilizzo:

  • Chiavi primarie del database
  • Identificatori di sessione (session IDs)
  • Nomi di file unici
  • Token API
  • Scopi generali in cui è necessario un ID garantito unico

Esempio: f47ac10b-58cc-4372-a567-0e02b2c3d479

Vantaggi:

  • Massima entropia e sicurezza
  • Nessuna dipendenza dal tempo o dai parametri di sistema
  • Implementazione più semplice

Probabilità di collisione: Generando 1 miliardo di UUID al secondo per 100 anni, la probabilità di collisione è di circa 0,00000006%.

UUID v5 (Hash SHA-1)

UUID v5 è uguale a v3, ma utilizza SHA-1 invece di MD5. Un’alternativa più moderna e sicura a v3.

Utilizzo:

  • Uguale a v3, ma con maggiore sicurezza
  • Preferito a v3 per i nuovi progetti
  • Generazione di UUID da URL, nomi DNS, OID, X.500 DN

Esempio: 886313e1-3b8a-5372-9b90-0c9aee199e5d

Vantaggi:

  • Deterministico
  • SHA-1 è più robusto di MD5
  • Adatto per la mappatura tra sistemi

Svantaggi:

  • Anche SHA-1 è considerato obsoleto (ma comunque più sicuro di MD5)
  • Richiede namespace e nome

UUID v6 (Timestamp ordinato)

UUID v6 è una versione migliorata di v1 con bit temporali riorganizzati per una migliore indicizzazione del DB. Progettato per risolvere problemi di località nei database.

Utilizzo:

  • Chiavi primarie del database con ordinamento temporale
  • Sistemi che richiedono sia l’ordinamento cronologico che le prestazioni del DB
  • Alternativa più moderna a v1

Esempio: 1ec9414c-232a-6b00-b3c8-9e6bdeced846

Vantaggi:

  • Migliore località del DB rispetto a v1 (timestamp nei bit di ordine superiore)
  • Ordinamento cronologico
  • Compatibile con lo standard UUID

Svantaggi:

  • Meno utilizzato rispetto a v1/v4
  • Contiene ancora informazioni temporali (rischio per la sicurezza)

UUID v7 (Timestamp Unix)

UUID v7 utilizza il timestamp Unix (millisecondi dal 1970) + bit casuali. La versione più recente di UUID con la migliore località del DB.

Utilizzo:

  • Chiavi primarie del database moderne
  • Sistemi che richiedono performance + ordinamento temporale
  • Sostituzione di v1/v6 nei nuovi progetti

Esempio: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f

Vantaggi:

  • Migliore località del DB di tutte le versioni
  • Il timestamp Unix è standard
  • Combina i vantaggi della casualità e dell’ordinamento temporale

Svantaggi:

  • Specificazione relativamente nuova (RFC 4122bis)
  • Meno supportata nei sistemi legacy

Quale versione di UUID usare?

Guida decisionale

Hai bisogno della massima sicurezza e casualità? → Usa UUID v4 (la scelta più comune)

Hai bisogno di ordinamento temporale e performance del DB? → Usa UUID v7 (moderno) o UUID v6 (standard)

Hai bisogno di UUID riproducibili da identificatori esistenti? → Usa UUID v5 (SHA-1) o UUID v3 (MD5, legacy)

Hai bisogno di un timestamp e di una traccia di audit? → Usa UUID v1 (legacy, peggiori performance del DB)

Database

Per i nuovi progetti: UUID v7 o v4

  • v7 è ideale per l’ordinamento temporale + performance
  • v4 per la massima casualità senza informazioni temporali

Per i sistemi legacy: UUID v1 o v6

  • v6 ha una migliore località del DB rispetto a v1
  • v1 è ampiamente supportato

Vantaggi degli UUID come chiave primaria:

  • Unicità globale – Puoi unire dati da diversi database senza conflitti
  • Sicurezza – A differenza degli ID sequenziali (1, 2, 3…) non è possibile indovinare i valori successivi
  • Sistemi distribuiti – Gli UUID possono essere generati indipendentemente su più server senza coordinamento
  • Unione di database – Durante l’unione di due database non sorgono conflitti

Svantaggi:

  • Dimensione maggiore (16 byte vs 4-8 byte per un intero)
  • Indicizzazione più lenta in alcuni database (usa v6/v7 per migliori performance)
  • Meno leggibile per l’uomo

API e Servizi Web

  • REST API – Identificatori univoci per le risorse
  • GraphQL – Identificatori globali per i nodi
  • Webhook – Tracciamento di richieste e risposte
  • Token – ID di sessione, token di refresh

File e Archiviazione

  • Nomi di file – Prevenzione delle collisioni durante l’upload
  • S3/Cloud Storage – Percorsi univoci per gli oggetti
  • Chiavi di cache – Identificatori nei sistemi di cache

Applicazioni Frontend

  • Componenti React/Vue – Chiavi uniche per le liste
  • ID temporanei – ID prima del salvataggio nel database
  • Local storage – Chiavi per i dati salvati
  • Applicazioni offline-first – Generazione di ID senza connessione al server

Funzionalità Avanzate del Generatore

Generazione di UUID con timestamp personalizzato

Per le versioni basate sul tempo (v1, v6, v7) puoi selezionare un timestamp arbitrario utilizzando il selettore data-ora. Questo è utile per:

Test:

  • Simulazione di UUID creati in passato
  • Test dell’ordinamento temporale nei database
  • Riproduzione di UUID per il debugging

Migrazione dati:

  • Generazione di UUID con timestamp storici
  • Inserimento di dati con valori di timestamp corretti
  • Importazione di dati da diversi periodi di tempo

Audit e conformità:

  • Ricostruzione di UUID in base al tempo di creazione del record
  • Generazione retroattiva di identificatori

Esempio di utilizzo:

  1. Seleziona la versione v1, v6 o v7
  2. Imposta data e ora utilizzando il selettore data-ora
  3. Genera UUID con il tuo timestamp personalizzato

UUID basati su Hash (v3, v5)

Per UUID deterministici puoi usare le versioni v3 (MD5) o v5 (SHA-1):

Come usare:

  1. Seleziona il namespace in base al tipo del tuo identificatore
  2. Inserisci il nome/valore
  3. Genera l’UUID

Esempi:

NamespaceNome (input)Utilizzo
DNSexample.comConversione di un nome di dominio in UUID
DNSgoogle.comOgni sito web ha un UUID unico
URLhttps://example.com/pageConversione di un URL in UUID
URLhttps://api.example.com/users/123Endpoint API come UUID
OID1.3.6.1.4.1.343Identificatore di Oggetto in UUID
X.500CN=John Doe,O=CompanyDistinguished Name in UUID

Proprietà importanti:

  • Deterministico: Stesso input = sempre stesso UUID
  • Riproducibile: Puoi ricreare l’UUID in qualsiasi momento
  • Consistente: Stesso UUID tra diversi sistemi
  • Non decodificabile: Dal UUID non è possibile recuperare il nome originale
  • ℹ️ Un solo UUID: Per v3/v5 viene generato sempre un solo UUID (stesso input = stesso output)

Uso pratico:

// Esempio: Conversione di URL in UUID v5
Namespace: URL
Nome: https://example.com/api/users/123
Risultato: 886313e1-3b8a-5372-9b90-0c9aee199e5d

// Stesso input = sempre lo stesso UUID
Namespace: DNS
Nome: google.com
Risultato: sempre lo stesso UUID per google.com

Come usare gli UUID in sicurezza?

Sicurezza Crittografica

Il nostro generatore utilizza crypto.getRandomValues(), un generatore di numeri casuali crittograficamente sicuro. A differenza di Math.random(), che è prevedibile e inadatto a scopi di sicurezza, crypto.getRandomValues() fornisce vera entropia adatta per:

  • Generazione di token di sicurezza
  • ID di sessione
  • Chiavi API
  • Applicazioni crittografiche

Confronto delle versioni UUID

VersioneBaseCollisioneOrdinamento temporalePerformance DBUtilizzo
v1Timestamp + MACBassa✅ Sì❌ PeggioreLegacy, audit
v3Hash MD5Nessuna (deterministico)❌ No⚠️ MediaConversioni (legacy)
v4CasualeEstremamente bassa❌ No⚠️ MediaUso generale
v5Hash SHA-1Nessuna (deterministico)❌ No⚠️ MediaConversioni (raccomandato)
v6Timestamp ordinatoBassa✅ Sì✅ MiglioreDB moderni con tempo
v7Timestamp UnixBassa✅ Sì✅ MiglioreNuovi progetti

UUID vs altri identificatori

TipoDimensioneCollisioneOrdinamento temporaleUtilizzo
ID auto-incrementale4-8 byteGarantito unico nella tabellaApplicazioni semplici, DB locali
UUID v416 bytePraticamente impossibileSistemi distribuiti, API
UUID v716 bytePraticamente impossibileDB moderni con performance
ULID16 bytePraticamente impossibileUUID + ordinamento lessicografico
Snowflake ID8 byteGarantito unico con configurazione correttaTwitter, sistemi distribuiti
NanoIDConfigurabileDipende dalla lunghezzaID URL-friendly

Implementazione in diversi linguaggi

JavaScript/TypeScript

// UUID v4 - Il modo più semplice (browser moderni)
const uuid = crypto.randomUUID();

// UUID v4 - Implementazione manuale
function generateUUIDv4() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> (c === 'x' ? 0 : 2);
    const v = c === 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}

// UUID v7 - Raccomandato per i database
function generateUUIDv7() {
  const timestamp = Date.now();
  const timeHi = (timestamp >> 16).toString(16).padStart(8, '0');
  const timeLow = (timestamp & 0xFFFF).toString(16).padStart(4, '0');

  const randomBytes = crypto.getRandomValues(new Uint8Array(10));
  const randomHex = Array.from(randomBytes)
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');

  return `${timeHi}-${timeLow}-7${randomHex.substr(0, 3)}-${randomHex.substr(3, 4)}-${randomHex.substr(7)}`;
}

Python

import uuid

# UUID v4
uuid_v4 = str(uuid.uuid4())
# Output: '6ba7b810-9dad-11d1-80b4-00c04fd430c8'

# UUID v1
uuid_v1 = str(uuid.uuid1())

Java

import java.util.UUID;

// UUID v4
String uuidV4 = UUID.randomUUID().toString();

PHP

// UUID v4 (PHP 7+)
function generateUUID() {
    return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand(0, 0xffff), mt_rand(0, 0xffff),
        mt_rand(0, 0xffff),
        mt_rand(0, 0x0fff) | 0x4000,
        mt_rand(0, 0x3fff) | 0x8000,
        mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
    );
}

C#

using System;

// UUID v4
Guid uuid = Guid.NewGuid();
string uuidString = uuid.ToString();

Migliori Pratiche

Salvataggio di UUID nel database

PostgreSQL:

CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);

MySQL 8.0+:

CREATE TABLE users (
    id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Suggerimento: In MySQL, salva gli UUID come BINARY(16) invece di CHAR(36) per risparmiare spazio e velocizzare l’indicizzazione.

Validazione UUID

function isValidUUID(uuid) {
  const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
  return regex.test(uuid);
}

Conversione UUID

// Rimozione dei trattini
const compact = uuid.replace(/-/g, '');

// Aggiunta dei trattini
function formatUUID(compactUuid) {
  return [
    compactUuid.substring(0, 8),
    compactUuid.substring(8, 12),
    compactUuid.substring(12, 16),
    compactUuid.substring(16, 20),
    compactUuid.substring(20, 32)
  ].join('-');
}

Risoluzione dei Problemi (Troubleshooting)

UUID v3/v5 non funziona

Problema: Dopo aver selezionato v3 o v5, non viene generato nulla

Soluzione:

  1. ✅ Verifica di aver compilato il campo “Nome” - è obbligatorio!
  2. ✅ Seleziona il namespace corretto in base al tipo del tuo input
  3. ✅ Esempi di input validi:
    • DNS: example.com, google.com
    • URL: https://example.com/page
    • Qualsiasi testo: la-mia-applicazione-v1

Suggerimento: Prova prima un valore semplice come test e il namespace DNS.

UUID temporale (v1, v6, v7) ha un orario strano

Problema: L’UUID generato ha un timestamp inaspettato

Soluzione:

  1. ✅ Controlla il selettore data-ora - è impostato l’orario corretto?
  2. ✅ Il selettore data-ora utilizza il fuso orario locale
  3. ✅ Lascia vuoto il selettore data-ora per l’ora corrente

UUID non copiabile

Problema: Il pulsante “Copia tutto” non funziona

Soluzione:

  1. ✅ Verifica di aver generato UUID (non sono vuoti)
  2. ✅ Alcuni browser richiedono HTTPS per l’API degli appunti
  3. ✅ In alternativa, seleziona il testo nell’area di testo e copia manualmente (Ctrl+C)

Domande Frequenti (FAQ)

Possono verificarsi collisioni UUID? Teoricamente sì, ma la probabilità è astronomicamente piccola. Generando 1 miliardo di UUID v4 al secondo per 100 anni, la probabilità di collisione è di circa 0,00000006%. In pratica, una collisione non si verifica mai.
L'UUID è adatto come chiave primaria in un database? Dipende dal caso d'uso. L'UUID è ideale per sistemi distribuiti e situazioni in cui è necessaria l'unicità globale. Per applicazioni semplici con un unico database, un ID auto-incrementale può essere più efficiente.
Gli UUID generati con questo strumento sono sicuri? Sì, utilizziamo l'API Web Crypto (`crypto.getRandomValues()`), che fornisce valori casuali crittograficamente sicuri. Tutto avviene localmente nel tuo browser.
Qual è la differenza tra le versioni UUID? - **v1**: Timestamp + MAC/casuale - ordinamento cronologico, peggiori performance DB - **v3/v5**: Basati su hash - deterministici, per la conversione di identificatori noti - **v4**: Casuali - i più sicuri, i più utilizzati - **v6**: Timestamp riorganizzato - migliori performance DB rispetto a v1 - **v7**: Timestamp Unix - migliori performance DB + ordinamento temporale
Quale versione di UUID dovrei usare? Per la maggior parte dei casi, usa **v4** (casuale). Per i database con ordinamento temporale, usa **v7** (moderno) o **v6** (standard). Per la conversione di identificatori noti (URL, DNS), usa **v5** (SHA-1).
Posso usare gli UUID per token e chiavi API? UUID v4 è adatto per ID di sessione e token simili. Per le chiavi API, considera l'uso di stringhe casuali più lunghe (ad esempio, valori a 256 bit) o librerie specializzate.
Quanto sono grandi gli UUID? Un UUID ha 128 bit (16 byte). In formato stringa con trattini occupa 36 caratteri. Senza trattini, 32 caratteri esadecimali.

Alternative agli UUID

ULID (Universally Unique Lexicographically Sortable Identifier)

  • ID a 128 bit (come UUID)
  • Ordinabile lessicograficamente in base al tempo di creazione
  • Rappresentazione più compatta (26 caratteri invece di 36)
  • Codifica base32 case-insensitive

Esempio: 01ARZ3NDEKTSV4RRFFQ69G5FAV

NanoID

  • Dimensioni minori rispetto agli UUID (21 caratteri standard)
  • URL-friendly (senza caratteri speciali)
  • Generazione più veloce
  • Lunghezza e alfabeto configurabili

Esempio: V1StGXR8_Z5jdHi6B-myT

Snowflake ID (Twitter)

  • ID a 64 bit (più piccolo degli UUID)
  • Ordinabile temporalmente
  • Contiene ID del worker e numero di sequenza
  • Richiede una configurazione centralizzata

Esempio: 1234567890123456789

Performance e Ottimizzazione

Velocità di generazione

Il nostro generatore può generare:

  • 1 UUID: < 1 ms
  • 100 UUID: ~10-20 ms
  • 1000 UUID: ~100-200 ms

Consigli per le performance

  1. Generazione in batch – Se hai bisogno di molti UUID, generane più di uno alla volta invece che singolarmente
  2. Salvataggio nel DB – Indicizza le colonne UUID per una ricerca veloce
  3. Compressione – Salva gli UUID in formato binario (16 byte) invece che stringa (36 byte)
  4. Caching – In alcuni casi puoi pre-generare e cacheare gli UUID

Per gli Sviluppatori

Struttura UUID v4

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|        |    |    |    |
|        |    |    |    └─ 48 bit di dati casuali (node)
|        |    |    └────── 16 bit di dati casuali con variante (clock_seq)
|        |    └─────────── 12 bit di dati casuali + 4 bit di versione (time_hi_and_version)
|        └──────────────── 16 bit di dati casuali (time_mid)
└───────────────────────── 32 bit di dati casuali (time_low)
  • Versione (4 bit): sempre 0100 (binario) = 4 (hex)
  • Variante (2-3 bit): sempre 10 (binario) per RFC 4122

Test degli UUID

// Test Jest
describe('UUID Generator', () => {
  test('generates valid UUID v4', () => {
    const uuid = generateUUIDv4();
    const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
    expect(regex.test(uuid)).toBe(true);
  });

  test('generates unique UUIDs', () => {
    const uuid1 = generateUUIDv4();
    const uuid2 = generateUUIDv4();
    expect(uuid1).not.toBe(uuid2);
  });
});

Aspetti di Sicurezza

Cosa non fare con gli UUID

Non usare UUID v1 per applicazioni sensibili – Contiene un timestamp, che può essere un rischio per la sicurezza

Non usare Math.random() per generare UUID – Non è crittograficamente sicuro

Non fare affidamento sugli UUID per l’autorizzazione – L’UUID può essere indovinato (anche se con probabilità estremamente bassa)

Non salvare gli UUID nei cookie senza crittografia – Usa cookie firmati o JWT

Cosa fare

Usa UUID v4 per la maggior parte dei casi – Massima entropia e sicurezza

Combina gli UUID con altre misure di sicurezza – Per la gestione delle sessioni usa HTTPS, cookie HttpOnly e una breve scadenza

Valida gli UUID sul server – Controlla sempre il formato e la versione dell’UUID

Usa fonti di casualità crittograficamente sicurecrypto.getRandomValues() nel browser, /dev/urandom su Linux

Curiosità

  • Numero di possibili UUID v4: 2^122 ≈ 5.3 × 10^36 (340 undecilioni)
  • Collisione necessaria: Per avere il 50% di probabilità di collisione, devi generare 2.71 × 10^18 UUID (2.71 quintilioni)
  • Dimensione di tutti i possibili UUID: Se salvassimo ogni UUID come 16 byte, l’intero spazio occuperebbe 85 zettabyte (85 miliardi di terabyte)
  • Origine: L’UUID è stato standardizzato come parte del DCE (Distributed Computing Environment) nel 1990