# 10.000 ID per chiamata in CSV o JSON: bulk per seed DB

> Generatore online di UUID v4 (random), v7 (time-ordered RFC 9562), v5 (namespace), ULID, NanoID. Bulk 10.000 ID per chiamata, export CSV/JSON.

Strumento gratuito nel browser (nessun upload): https://www.mauriziofonte.it/strumenti/generatore-uuid

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. **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. **Imposta quantità** - Fino a 10.000 per generazione. Per dataset più grandi conviene uno script batch (Python `uuid.uuid4()` in loop).
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. **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 unicità 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

- **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: le cifre 0-9 e le lettere A-Z tranne I, L, O e U, che si confondono con 1 e 0 (e U evita parole oscene accidentali). In lettura I e L valgono 1, O vale 0. Ottimizzato per leggibilità 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 leggibilità. 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 unicità 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, e chi legge un ULID deve accettarlo maiuscolo o minuscolo. Questo tool genera gli ID, non li decodifica.

---
Uno strumento di Maurizio Fonte, senior backend engineer. Tutti gli strumenti: https://www.mauriziofonte.it/strumenti/
