Vai al contenuto
ID generators

Generatore UUID, ULID, NanoID

Genera identificatori unici crypto-safe in tutti i formati standard: UUID v4 (random RFC 4122), UUID v7 (time-ordered RFC 9562, 2024), UUID v5 (namespace + name SHA-1), ULID (timestamp + Crockford base32), NanoID (url-safe alphabet). Bulk fino a 10.000 ID per chiamata, export CSV o JSON.

Come usare il generatore

  1. 1

    Scegli il tipo

    UUID v4 per random standard. UUID v7 per ID time-ordered (utili come primary key in database, indice più efficiente del v4). UUID v5 per ID deterministici da nome (es. UUID stabile per ogni email cliente). ULID per ID lessicograficamente ordinabili. NanoID per token URL-friendly più corti dei UUID.

  2. 2

    Imposta quantità

    Fino a 10.000 per generazione. Per dataset più grandi conviene uno script batch (Python uuid.uuid4() in loop).

  3. 3

    Per UUID v5: namespace + nome

    Il namespace è un UUID che identifica il dominio applicativo (DNS, URL, custom). Il nome è la stringa da hashare. Risultato: stesso namespace + stesso nome = sempre stesso UUID. Usato per migrazione di ID legacy a UUID stabili.

  4. 4

    Esporta

    Copia tutti negli appunti, oppure scarica come CSV (con index) o JSON array. Compatibile con import in Postgres COPY, MySQL LOAD DATA, MongoDB insertMany.

Quale formato scegliere

UUID v4 è la scelta default storica. 122 bit di entropia, collisione virtualmente impossibile (1 ogni 2^61 = 2.3 miliardi di miliardi). Ottimo per ID di sessione, token API, primary key dove non importa l'ordinamento.

UUID v7 (RFC 9562 maggio 2024) è una rivoluzione per database. Mantiene la unicita' del v4 ma incorpora timestamp ms-precision come prefisso. Risultato: gli ID generati cronologicamente vicini hanno valori vicini, il B-tree del database non frammenta su INSERT, write throughput +50-300% rispetto al v4 random. Adottarlo come primary key se il sistema è stato ridisegnato dopo il 2024.

ULID è una alternativa al UUID con encoding più compatto (26 char vs 36 del UUID hex con dash). Lessicograficamente ordinabile per timestamp. Crockford base32 evita caratteri ambigui (0/O, 1/I/L). Use case tipico: log line ID, request ID in distributed tracing.

NanoID è la scelta minimale per token URL-safe. 21 caratteri di default = 126 bit entropia (paragonabile al UUID). Alfabeto 64 caratteri url-safe (no escape needed in URL). Use case: short URL, reset password token, invite code.

UUID v5 è deterministico (namespace + name -> hash SHA-1 -> UUID). Stesso input ritorna sempre lo stesso UUID. Use case: assegnare un UUID stabile a ogni record di un sistema legacy che ha solo ID auto-increment, senza modificare la base dati.

Glossario

Termini tecnici usati in questa pagina, spiegati in due righe.

UUID #
Universally Unique Identifier, RFC 4122 (2005). Stringa di 36 char (32 hex + 4 dash). Versioni: v1 (mac+timestamp), v3 (md5), v4 (random), v5 (sha1), v6/v7/v8 (RFC 9562, 2024).
ULID #
Universally Unique Lexicographically Sortable Identifier. 26 char Crockford base32. 48-bit timestamp + 80-bit random.
NanoID #
Token URL-safe del compactness simile a UUID. Default 21 char, alfabeto 64 caratteri. Algoritmo di Andrey Sitnik.
Crockford base32 #
Codifica base32 di Doug Crockford, 32 caratteri (0-9 A-Z) escluso 0/O, 1/I/L, U. Ottimizzato per leggibilita' umana e prevenzione di errori di trascrizione.
WebCrypto #
API W3C per operazioni crittografiche native nel browser. crypto.getRandomValues per random bytes, crypto.randomUUID per UUID v4 nativo (browser dal 2022).
Time-ordered ID #
ID che incorpora un timestamp come prefisso, garantendo che ID generati in ordine cronologico siano lessicograficamente ordinati. Beneficio principale: index B-tree non frammentato, write throughput aumentato.

Domande frequenti

UUID v7 è supportato dai database moderni?
Si come stringhe (varchar/uuid type). PostgreSQL ha tipo UUID nativo che accetta v7 senza modifiche. MySQL 8 ha BINARY(16) che funziona uguale. SQLite TEXT. Molti ORM (Prisma 5+, Drizzle, TypeORM 0.3+) supportano v7 nativamente come default UUID. Per migrare un sistema esistente da v4 a v7: cambiare il default value, gli ID storici v4 restano validi (UUID è append-only).
Posso generare un milione di UUID con questo tool?
Limit di 10.000 per evitare freeze del tab. Per dataset più grandi: uuidgen CLI (Linux/macOS), Python [uuid.uuid4() for _ in range(1000000)], Node require('crypto').randomUUID() in loop. Tutti producono UUID identici per qualità (stesso CSPRNG).
Differenza pratica fra ULID e UUID v7?
Entrambi time-ordered. ULID è più compatto (26 char vs 36 char) grazie a base32 invece di hex+dash. UUID v7 è standard RFC, ULID è specifica de facto più giovane (2016). Per nuovi sistemi: UUID v7 se vuoi standard ratificato, ULID se vuoi compactness e leggibilita'. Funzionalmente equivalenti.
NanoID è meno sicuro di UUID?
Dipende dalla dimensione. NanoID 21 char con alfabeto 64 = 126 bit entropia, equivalente al UUID v4 (122 bit). NanoID 8 char = 48 bit, troppo poco per ID univoci globali. La scelta default (21 char) è calibrata per dare circa lo stesso livello di unicita' del UUID, in 41% dei caratteri. Per token URL-safe è la scelta migliore.
UUID v5 produce sempre lo stesso UUID per (namespace, name)?
Si, è deterministico. SHA-1(namespace_bytes + name_bytes) -> primi 16 byte -> formattato come UUID. Use case: avere UUID stabili senza tabella di mapping (es. UUID per ogni email cliente, ogni dominio DNS, ogni risorsa REST).
Il tool genera UUID con sistema crittograficamente sicuro?
Si. Tutti i tipi usano crypto.getRandomValues() che chiama il CSPRNG del sistema operativo (/dev/urandom, CryptGenRandom, getrandom syscall). Stessa qualità di entropia di OpenSSL, libsodium, Python secrets.
Posso esportare in formato custom (es. SQL INSERT)?
Non direttamente. CSV e JSON sono i due formati supportati in V1. Per SQL INSERT: copia il CSV, apri in Excel/sed, costruisci la VALUES list. Oppure script Python: print(';'.join(f"INSERT INTO t (id) VALUES ('{u}');" for u in uuids)).
ULID è case-sensitive?
No, Crockford base32 è case-insensitive: A==a, B==b, ecc. Il tool genera maiuscole come standard, ma l'input può essere maiuscolo o minuscolo per parsing/validazione.

Chi sviluppa questi strumenti?

Maurizio Fonte, consulente IT senior con oltre 20 anni di esperienza in PHP, Laravel, infrastrutture Linux, cybersecurity e integrazione AI/LLM in azienda. Backend di produzione, modernizzazione di codice legacy, audit di sicurezza, agenti AI e MCP server custom: il lavoro che sta dietro a questi strumenti.

Conosci Maurizio Fonte