# Faker italiano: nomi, cognomi, città reali per seed database

> Generatore mock data online per testing: 5 lingue (it/en/es/de/fr), schema custom (nome, email, UUID, date), output JSON, CSV, SQL INSERT.

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

Genera **dati realistici di test** per popolare ambienti di sviluppo, seed di database e demo. Multi-locale (italiano, inglese, spagnolo, tedesco, francese) con dataset curati di nomi, cognomi e città. Schema custom: scegli i field e il loro tipo (nome, email, telefono, indirizzo, UUID, integer, float, boolean, date, lorem ipsum). Output esportabile in **JSON**, **CSV** e **SQL INSERT** in batch ottimizzato per seed database.

## Come generare un dataset

1. **Scegli il locale** - Italiano per dataset di clienti italiani, inglese per dataset internazionali generici, spagnolo / tedesco / francese per mercati specifici. Il locale controlla nomi, cognomi, città, codici telefono. Email e UUID sono locale-independent.
2. **Definisci lo schema** - Aggiungi una riga per ogni field del dataset. Ogni field ha un nome (es. `nome`, `email`) e un tipo (dropdown). Schema tipico utenti: id (UUID) + nome (Nome completo) + email (Email) + creato_il (Data ISO 8601).
3. **Imposta righe e formato** - Numero di righe: 10-1000 tipicamente per testing locale, fino a 10000 per stress test. Formato: JSON per fixture API, CSV per import in Excel/database, SQL INSERT per direct seed di un DB MySQL/MariaDB/Postgres.
4. **Genera ed esporta** - Bottone 'Genera': l'output appare nella text-area, copiabile o scaricabile come file (.json, .csv, .sql). La generazione avviene direttamente nel browser, utile quando lo schema simula un dominio applicativo reale e non vuoi che la struttura del modello dati lasci la macchina.

## Perché generare in locale

**Lo schema dei dati come asset.** Quando generi mock per simulare un dominio applicativo realistico (clienti, ordini, transazioni, dipendenti, prodotti), lo schema stesso è informazione di valore: rivela la struttura del tuo modello dati, le relazioni fra entità, i campi sensibili che gestisci. La generazione locale evita che questo schema transiti per servizi terzi che lo logghino insieme all'IP di chi lo richiede.

**Multi-locale curato.** 60+ nomi e 50+ cognomi italiani reali (Marco, Luca, Giulia, Rossi, Bianchi, Esposito), 30 città principali con CAP coerenti (Milano 20121, Roma 00100, Napoli 80100). Stesso ordine di curation per inglese, spagnolo, tedesco, francese. Sufficiente a generare dataset fino a circa 10.000 righe senza ripetizioni evidenti, con formattazioni telefono e indirizzi conformi alle convenzioni di ciascuna locale.

**Output multi-target.** JSON pretty-printed per fixture API e blob storage. CSV con header per import in Excel, Google Sheets o database (UTF-8, comma-separated, double-quote escaping). SQL INSERT con table name configurabile, in batch `INSERT ... VALUES (...), (...)` per seed efficienti, con limite a 1000 row per statement per evitare overflow del packet size lato server SQL.

## Glossario

- **Mock data**: Dati sintetici realistici, usati per popolare ambienti di sviluppo, demo, test automatici. Distinto da dati di produzione anonimizzati: i mock data sono generati ex novo senza riferimenti a entità reali.
- **Locale**: Combinazione lingua + regione (es. `it_IT`, `en_US`, `de_DE`) che determina convenzioni culturali: nomi tipici, formati telefono/data/numero, indirizzi. Qui semplificato a 5 lingue base.
- **Faker**: Famiglia di librerie open source di generazione mock data, disponibili in Ruby, JavaScript (sia versione legacy sia fork attivamente mantenuto), Python e PHP. Sono lo standard de facto per fixture e seed in development; questo tool ne implementa il subset più usato per chi vuole un'output one-shot senza installare un toolchain dedicato.
- **Seed (database)**: File SQL con INSERT di dati base usato per popolare un database in stato iniziale. Distinto da migration (cambia schema) e fixture (per test). Il formato SQL INSERT generato qui è adatto a uso seed.
- **Batch INSERT**: INSERT SQL con value list multipla: `INSERT INTO t VALUES (...), (...), (...)`. Molto più veloce di N INSERT separati per seed di volume. Limite pratico: max_allowed_packet (4MB default MySQL).
- **UUID v4**: Identificatore univoco a 128bit (RFC 4122), variante 4 = random pseudo-randomico. Generato qui via `crypto.randomUUID()` nativo browser, qualità crittografica.

## Domande frequenti

### Quanti record posso generare al massimo?

Limite tecnico ~10000 righe (oltre il browser potrebbe rallentare per il render del CSV/SQL). Per dataset più grandi conviene generare in batch e concatenare lato server, oppure usare un generator CLI (faker, mimesis Python). Limite di sicurezza: 50000 righe per evitare freeze del browser.

### I dati sono completamente unici?

No, random pesca dal dataset locale. Per 100 record italiani con 60 nomi unici, vedrai ripetizioni statistiche. Per dataset grandi con uniqueness garantita su un field (es. email univoche), aggiungi un suffix random o usa UUID al posto del nome.

### L'output SQL funziona su MySQL e PostgreSQL?

Sì, sintassi standard ISO compatibile con entrambi. Per Postgres con campi UUID nativi `UUID` serve aggiungere `::uuid` cast manuale; il generator emette stringhe quoted ('xxx-xxx'). Date emesse in formato ISO compatibile con DATETIME (MySQL) e TIMESTAMP (Postgres).

### Email generate sono valide?

Sintatticamente sì. Il dominio è sempre uno di quelli riservati dall'RFC 2606 (example.com, example.org, example.net): nessun indirizzo generato appartiene a una persona reale, quindi un invio per errore da un ambiente di test non raggiunge nessuno.

### Posso definire range custom per i numeri?

Non in questo tool, range fisso (intero 1-1000, float 0-100). Per range custom serve un generator programmatico (faker.js permette `faker.number.int({min: 5, max: 50})`). Workaround qui: genera, poi processa con sed/awk per shift dei range.

### Il CSV è compatibile Excel?

Sì, con caveat: l'encoding è UTF-8 senza BOM, alcune versioni di Excel su Windows lo aprono come ASCII (caratteri accentati rotti). Se necessario, apri Excel -> Importa CSV -> seleziona UTF-8 manualmente, oppure aggiungi BOM al file (3 byte `EF BB BF` all'inizio).

### I dati sono deterministici (seedabili)?

No, ogni 'Genera' produce un dataset diverso. Per dataset riproducibile serve un seedable PRNG (qui usiamo `Math.random()` non seedable). Workaround: una volta generato un dataset che ti piace, copialo e mantienilo come fixture statica nel progetto.

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