Generatore di Numeri Casuali
Genera uno o più numeri casuali in qualsiasi intervallo, con o senza ripetizioni — usando la casualità crittografica.
1.454 visualizzazioni
Come Vengono Generati Davvero i Numeri
Non tutto ciò che è "casuale" è uguale. Math.random(), disponibile in ogni browser, è un generatore pseudo-casuale veloce — deterministico sotto il cofano e, in linea di principio, prevedibile se qualcuno conosce il suo stato interno, il che lo rende inadatto a qualsiasi cosa sensibile dal punto di vista della sicurezza come le estrazioni con una vera posta in gioco. Questo strumento usa invece crypto.getRandomValues(), il generatore casuale crittograficamente sicuro integrato nel browser, che attinge dalle fonti di entropia del sistema operativo e non è prevedibile nemmeno in linea di principio.
Avere una fonte casuale sicura risolve però solo metà del problema. Mappare un valore casuale su un intervallo specifico (ad esempio 1-100) in modo ingenuo — prendendo random % 100 — introduce un bias di modulo sottile ma reale: poiché l'intervallo di output grezzo del generatore di solito non è un multiplo esatto di 100, alcuni resti finiscono per essere leggermente più probabili di altri. Il bias è piccolo, ma è reale e si accumula su molte estrazioni — esattamente il tipo di cosa che non dovrebbe esistere in un sorteggio presumibilmente equo.
La soluzione è il campionamento per rifiuto (rejection sampling): invece di forzare ogni valore grezzo nell'intervallo tramite modulo, i valori grezzi fuori intervallo vengono scartati e ne viene estratto uno nuovo finché non rientra perfettamente in un multiplo esatto dell'intervallo target. Questo garantisce una distribuzione davvero uniforme — ogni numero nell'intervallo ha esattamente la stessa probabilità — al costo di richiedere occasionalmente un'estrazione extra o due, il che è impercettibile alle velocità in gioco.
Scegli un minimo, un massimo e quanti numeri servono; seleziona univoco per evitare ripetizioni, cosa di cui hanno bisogno estrazioni, sorteggi a premi, campionamenti e giochi quando la stessa voce non deve vincere due volte. Tutto viene eseguito sul dispositivo locale — nessun numero viene trasmesso o salvato da nessuna parte, e aggiornare la pagina produce un'estrazione completamente nuova.
Cose Utili da Sapere
- Il bias di modulo è invisibile in una manciata di estrazioni ma diventa statisticamente rilevabile su migliaia — il campionamento per rifiuto lo elimina completamente invece di limitarsi a ridurlo.
- Il fatto che crypto.getRandomValues() sia "crittograficamente sicuro" significa che il suo output non può essere previsto nemmeno da qualcuno che ha visto gli output precedenti — una proprietà che Math.random() non ha esplicitamente e non è mai stato progettato per avere.
- L'intervallo è inclusivo su entrambi gli estremi: un'estrazione 1-10 può produrre sia 1 che 10, non solo i valori strettamente compresi tra essi.
- Per un sorteggio verificabile, numera i partecipanti da 1 a N, imposta l'intervallo di conseguenza, attiva univoco e fai uno screenshot del risultato, poiché non viene salvato nulla lato server dopo l'estrazione.
Domande Frequenti
I numeri sono davvero casuali o solo "abbastanza casuali"?
Provengono da crypto.getRandomValues(), che attinge alla fonte di entropia crittografica del sistema operativo - imprevedibili in linea di principio, non solo nella pratica, a differenza del semplice Math.random() usato dalla maggior parte degli script casuali occasionali.
Cos'è il bias di modulo e questo strumento ce l'ha?
Mappare ingenuamente un valore casuale su un intervallo con random % N favorisce leggermente alcuni numeri rispetto ad altri, perché l'intervallo grezzo del generatore di solito non è un multiplo esatto di N. Questo strumento lo evita con il campionamento per rifiuto: i valori grezzi fuori intervallo vengono scartati e riestratti finché non è garantito un risultato uniforme.
Cos'è il campionamento per rifiuto, in termini semplici?
Invece di forzare ogni valore casuale in un intervallo con un'operazione di modulo, i valori che introdurrebbero un bias vengono semplicemente scartati e ne viene estratto uno nuovo - ripetendo finché non esce un valore che si mappa perfettamente e in modo uniforme nell'intervallo. Il costo è un'estrazione extra occasionale; il beneficio è un risultato davvero uniforme.
Posso usarlo per un'estrazione a premi?
Sì. Numera i partecipanti da 1 a N, imposta l'intervallo di conseguenza, attiva univoco e genera tutti i vincitori che servono. Fai uno screenshot per i tuoi archivi, poiché i risultati non vengono salvati da nessuna parte dopo l'estrazione.
Sia il minimo che il massimo sono inclusi nell'intervallo?
Sì - l'intervallo è inclusivo su entrambi gli estremi. Un'estrazione 1-10 può produrre sia 1 che 10, esattamente come se si estraessero bigliettini numerati da un cappello.
Strumenti Simili
Segnala un Problema
Generatore di Numeri Casuali
Commenti
Ancora nessun commento — scrivi il primo!