La prima volta che i numeri casuali mi hanno morso è stato su un progetto parallelo Laravel anni prima che iniziassi a costruire Toolz.dev. Avevo bisogno di codici di riferimento brevi, raggiunti per rand() perché era proprio lì, e l'ha spedito Una settimana dopo due utenti avevano lo stesso codice Non perché le probabilità fossero astronomiche, ma perché avevo frainteso cosa rand() in realtà promesso Quel piccolo imbarazzo mi ha insegnato una lezione che ho portato in ogni strumento su Toolz.dev: & quot;random" non è una cosa C'è il casuale casuale casuale che va bene per un lancio di dadi, e c'è il casuale serio di cui hai bisogno nel momento in cui un valore custodisce qualsiasi cosa.
Questa guida è la versione lunga di ciò che vorrei qualcuno mi avesse detto allora Passeggerò attraverso come generare numeri casuali con il Generatore di numeri casuali su Toolz.dev, quando contano gli insiemi unici, perché la fonte della casualità cambia ciò per cui puoi utilizzare in sicurezza l'output e i casi pratici in cui lo raggiungo durante la costruzione.
tl; dr: Un generatore di numeri casuali estrae valori da un intervallo definito Imposta un minimo e un massimo, scegli quanti numeri desideri e scegli numeri interi o decimali Attiva solo univoco quando nessun valore può ripetersi, che è ciò che desideri per lotterie, lotterie e campionamento senza sostituzione Il generatore Toolz.dev funziona interamente nel tuo browser e preferisce l'API Web Crypto per la sua casualità, quindi nulla di ciò che generi lascia mai il tuo dispositivo.
Cosa fa effettivamente un generatore di numeri casuali?
Un generatore di numeri casuali mappa una fonte imprevedibile di bit su un intervallo Questo è l'intero lavoro In un browser la fonte che conta è crypto.getRandomValues(), che l'API Web Cryptography richiede per essere crittograficamente forte - a differenza Math.random(), che non fa tale promessa Gli dici l'intervallo, diciamo da 1 a 100, e restituisce un valore dall'interno di quell'intervallo dove, idealmente, ogni valore ha le stesse possibilità di apparire Chiedi più di uno e ripete il pareggio.
La parte interessante è la parola & quot; imprevedibile, & quot; perché i computer sono macchine deterministiche che non producono naturalmente sorpresa Ciò che producono è pseudo-casualità: una sequenza che sembra casuale e supera test statistici ma è generata da un algoritmo da un seme di partenza Dai allo stesso algoritmo lo stesso seme e ottieni la stessa sequenza ogni volta Quella riproducibilità è una caratteristica quando stai scrivendo un test che deve essere ripetibile, e una responsabilità quando stai coniando qualcosa che deve essere inguardabile.
Su Toolz.dev il generatore si trova nel browser e legge i suoi bit da crypto.getRandomValues quando il browser lo espone, cosa che fa ogni browser moderno Quella funzione è definita dall'API Web Cryptography del W3C ed è supportata dal sistema operativo's fonte crittograficamente sicura Quando quella fonte è presente, i numeri sono abbastanza imprevedibili per un lavoro adiacente alla sicurezza come raccogliere token o mescolare un mazzo Quando è in qualche modo non disponibile, lo strumento ricade nel generatore standard JavaScript, che va bene per giochi e campionamenti ma non dovrebbe mai seminare nulla di segreto Sapere in quale di quei due mondi ti trovi è la singola cosa più importante sull'utilizzo di qualsiasi pozzo RNG.
Come si generano numeri casuali su Toolz.dev?
Il flusso è volutamente breve perché la maggior parte delle volte si vuole solo un numero e lo si vuole ora.
Per prima cosa, imposta l'intervallo Inserisci il minimo e il massimo Per i numeri interi l'intervallo è inclusivo su entrambe le estremità, quindi da 1 a 6 può restituire uno qualsiasi tra 1, 2, 3, 4, 5 o 6, esattamente come un dado Valori negativi e intervalli che si estendono su zero, come da -50 a 50, funzionano allo stesso modo.
Secondo, scegli quanti numeri vuoi Un numero per una scelta rapida, o un lotto fino a diecimila quando stai seminando i dati del test o costruendo un campione.
Terzo, scegli le opzioni Lascia & quot; solo interi& quot; acceso per numeri interi, oppure spegnilo e imposta il numero di cifre decimali quando hai bisogno di valori frazionari Attiva & quot; solo valori univoci" quando nessun numero può ripetersi.
Infine, fai clic su Genera Il risultato mostra l'elenco insieme alla somma e alla media e l'intero lotto viene copiato come elenco separato da una nuova riga in modo che cada direttamente in una colonna di fogli di calcolo, uno script o un dispositivo di prova Se hai utilizzato il file Generatore di UUID o il Generatore di password su Toolz.dev, la forma di questo sembrerà familiare, perché cerco di mantenere i generatori coerenti.
Quando devo usare i numeri univoci-only?
Questa è l'opzione che le persone perdono, ed è quella che cambia di più la matematica.
Per impostazione predefinita il generatore pesca con sostituzione Ogni estrazione è indipendente, quindi un numero può apparire più di una volta nello stesso lotto Che è corretto per il lancio di dadi, perché una vera coppia di dadi può assolutamente venire con due quattro Ma è sbagliato per un sorteggio della lotteria, una lotteria, o in qualsiasi momento si sta scegliendo un campione senza mettere il gettone di nuovo nella borsa.
Accendi solo-unico e il generatore disegna senza sostituzione Tiene un registro di ciò che ha già prodotto e salta le ripetizioni fino a riempire il tuo lotto L'uso classico sono i numeri della lotteria: se vuoi sei numeri da 1 a 49 senza duplicati, solo-unico è la differenza tra un biglietto valido e uno rotto.
C'è un limite naturale qui, e lo strumento lo rispetta Non si possono disegnare più interi univoci di quanti ne possa contenere l'intervallo Chiedi dieci numeri univoci tra 1 e 5 e non c'è una risposta valida, perché in quell'intervallo esistono solo cinque numeri interi distinti Piuttosto che girare per sempre cercando di trovare un sesto valore impossibile, il generatore si ferma e ti dice che l'intervallo è troppo piccolo Ho costruito quella guardia apposta dopo aver visto troppi ingenui cicli di mescolamento appesi nel codice di produzione.
Interi o decimali: di quale ho bisogno?
Gli interi coprono la maggior parte delle richieste Dadi, palline della lotteria, indici di array e conteggi di record sono tutti numeri interi e la modalità intera ti offre un intervallo inclusivo che corrisponde al modo in cui le persone pensano a quelle cose.
I decimali sono per quantità continue: un prezzo casuale, una lettura simulata del sensore, un peso, una probabilità Spegni la modalità intera e lo strumento attinge dall'intervallo semiaperto che include il minimo ma non il massimo Quella convenzione semiaperta, minimo incluso e massimo escluso, è la stessa che sta alla base di quasi ogni RNG a virgola mobile in ogni lingua, incluso JavaScript's propria Math.random, che restituisce un valore nell'intervallo da 0 fino a 1 escluso. Abbinare quella convenzione significa che i numeri che ottieni qui si comportano come i numeri che otterresti nel codice.
Controlli anche il numero di cifre decimali, da una a dieci Due posizioni sono giuste per valori simili a valute, di più quando stai simulando misurazioni che necessitano di una risoluzione più fine Tieni presente che solo univoco più decimali è quasi sempre soddisfacibile perché lo spazio di decimali distinti è enorme, mentre solo univoco più un piccolo intervallo intero è il punto in cui colpisci il muro sopra descritto.
Quanto è casuale & quot;abbastanza casuale& quot;?
Ecco la tabella che vorrei aver visto prima di quell'incidente del codice di riferimento. Mappa i casi d'uso comuni sul tipo di casualità che effettivamente richiedono.
| caso d'uso | Necessaria casualità | Ripetizioni consentite? | banconote |
|---|---|---|---|
| Dadi, giochi da tavolo | Lo pseudo-casuale va bene | certo | L'indipendenza per rotolo è il punto |
| Scegliendo un vincitore casuale | Crittografico preferito | No (solo unico) | L'equità conta, usa solo l'unico |
| Numeri della lotteria o della lotteria | Crittografico preferito | No (solo unico) | Disegna senza sostituzione |
| Righe di campionamento per l'analisi | Lo pseudo-casuale va bene | Di solito no | Unico solo per il campionamento senza sostituzione |
| Apparecchi di prova per la semina | Lo pseudo-casuale va bene | certo | La riproducibilità può anche essere desiderabile |
| Gettoni di sicurezza, segreti | Crittografico richiesto | no | Non usare mai un semplice PRNG qui |
La riga che fa inciampare le persone è & quot; token di sicurezza.& quot; un RNG per uso generale, anche buono, non è un sostituto di un generatore segreto appositamente creato Se stai creando una chiave API, un token di sessione o una password, usa uno strumento progettato per quel lavoro, come il Generatore di password, o uno strumento di hashing come il Generatore di hash quando hai bisogno di un digest a lunghezza fissa Il generatore di numeri casuali è per i numeri in un intervallo, non per il materiale della chiave crittografica, e l'inquadratura onesta di quel confine è più utile che fingere che uno strumento faccia tutto.
Cosa posso costruire realmente con esso?
Alcuni dei modi in cui questo guadagna il suo posto nel mio flusso di lavoro.
Quando sto testando un'interfaccia utente che esegue il rendering degli elenchi, genero un lotto di poche centinaia di numeri per sostituire quantità, prezzi o punteggi, incollarli in un dispositivo e improvvisamente il layout viene esercitato con varietà realistica invece delle stesse tre righe digitate a mano Per il lavoro di WordPress su WP Adminify ho utilizzato valori casuali per popolare il contenuto demo in modo che una schermata delle impostazioni appaia viva in uno screenshot.
Quando un cliente esegue un giveaway, la modalità solo univoco sceglie i vincitori in modo equo da un elenco numerato di partecipanti Assegna a ciascun partecipante un numero, estrai tanti vincitori unici quanti sono i premi, fatto Nessuna formula del foglio di calcolo, nessuna discussione sul fatto che l'estrazione sia stata truccata, perché i numeri provenivano da una fonte che nessuno di noi controlla.
Per una rapida intuizione statistica, generare un lotto di grandi dimensioni e guardare la somma e la media è un rapido controllo di integrità che la gamma e la distribuzione si stanno comportando Se chiedo numeri da 1 a 100 e la media torna vicino a 50, il mondo è come previsto.
E per le cose di tutti i giorni, è un rullo di dadi, un lancio di moneta quando tratti 1 e 2 come testa e croce, e un & quot; scegli un numero& quot; colono di piccoli argomenti Non ogni uso deve essere serio per essere utile.
Come si confronta questo con la scrittura della tua?
Potresti scrivere Math.floor(Math.random() * (max - min + 1)) + min e sia fatto Ho scritto quella riga mille volte Allora perché prendere uno strumento?
Due ragioni, entrambe imparate nel modo più duro Il primo sono gli errori off-by-one e modulo-bias che si insinuano nella matematica della gamma arrotolata a mano, specialmente una volta aggiunto il confine inclusivo contro esclusivo e il requisito unico-solo Lo strumento gestisce i casi limite, incluso il & quot; hai chiesto più valori univoci di exist" case, quindi non li riscopri alle 2 del mattino Il secondo è che Math.random non è esplicitamente sicuro crittograficamente, un fatto che la documentazione MDN afferma chiaramente, ed è facile dimenticare che quando incolli uno snippet nel codice che successivamente protegge qualcosa di reale Il generatore Toolz.dev è predefinito per la sorgente crittografica, quindi il comportamento più sicuro è quello che ottieni senza pensarci.
Per un numero una tantum in un ambiente che controlli, va bene uno snippet Per estrazioni ripetibili, set unici, lotti che desideri copiare o qualsiasi cosa in cui desideri la sorgente crittografica per impostazione predefinita, lo strumento salva le parti difficili.
Se il tuo lavoro tende più alla codifica e alla formattazione rispetto alla generazione di numeri, la stessa filosofia lato client attraversa il resto della cassetta degli attrezzi, dal Lorem Ipsum generatore per testo segnaposto all'insieme più ampio trattato nel Strumenti di produttività per sviluppatori guida. E poiché ognuno di questi corre localmente, il privacy dati la storia è la stessa in tutti: i tuoi input rimangono nel tuo browser.
Quali sono gli errori comuni che le persone commettono con i numeri casuali?
Dopo anni passati a rivedere il codice, il mio e altre persone's, la stessa manciata di errori si manifesta ancora e ancora, e vale la pena nominarli in modo da poterli evitare.
Il primo è confusionario & quot; improbabile& quot; con & quot; impossibile.& quot; La mia storia del codice di riferimento è esattamente questa Quando disegni con la sostituzione da un intervallo, le collisioni non sono un bug, sono una certezza statistica date abbastanza estrazioni Il paradosso del compleanno è l'illustrazione classica: in un gruppo di sole 23 persone la possibilità che due condividano un compleanno è superiore al 50%, molto più alta di quanto suggerisca l'intuizione, perché stai confrontando ogni coppia, non paragonando tutti a una data fissa Se i tuoi valori devono essere unici, non sperare che l'intervallo sia abbastanza grande Attiva solo univoco e rimuovi il dubbio.
Il secondo sta raggiungendo la fonte sbagliata Molti tutorial mostrano una formula di gamma costruita su Math.random e non menzionare mai che non è adatto a nulla di sensibile alla sicurezza Il valore sembra casuale, la demo funziona e l'abitudine si attacca Poi qualcuno copia quello snippet nel codice che genera un token di reimpostazione della password, e ora il token & quot; random" è prevedibile per chiunque comprenda l'algoritmo sottostante La regola è brusca: se un essere umano non dovrebbe mai essere in grado di indovinare il valore, ha bisogno di una fonte crittografica Il generatore Toolz.dev è predefinito su quella fonte, che è il default più sicuro su cui costruire un'abitudine.
Il terzo è errori off-by-one ai confini dell'intervallo Gli endpoint inclusivi rispetto a quelli esclusivi fanno scattare anche sviluppatori esperti, perché linguaggi diversi e funzioni diverse fanno scelte diverse È 100 un output possibile quando chiedo da 1 a 100? per i numeri interi qui, sì, entrambe le estremità sono incluse Per i decimali il massimo è escluso, corrispondendo alla convenzione in virgola mobile Essere espliciti su quale convenzione si applica impedisce il bug silenzioso in cui i tuoi dadi non tirano mai un sei perché hai scritto < max invece di <= max.
Il quarto è supporre che un piccolo campione sembri casuale La vera casualità produce grumi e striature Capovolgi una moneta giusta dieci volte e una corsa di quattro teste è del tutto normale, eppure le persone la vedono e presumono che la moneta, o il generatore, sia rotta La casualità non è la stessa cosa di una spaziatura uniforme Se vuoi valori equidistanti, non vuoi affatto un generatore di numeri casuali, vuoi una sequenza Sapere quale effettivamente ti serve è metà della battaglia.
Domande frequenti
Come funziona un generatore di numeri casuali?
Un generatore di numeri casuali mappa una fonte imprevedibile di bit sull'intervallo scelto Questo strumento legge i byte dall'API Web Crypto quando è disponibile e li scala nel tuo intervallo da minimo a massimo, quindi ogni valore nell'intervallo ha la stessa possibilità di essere disegnato.
I numeri sono davvero casuali?
Sono numeri pseudo-casuali crittograficamente forti, imprevedibili a tutti gli effetti pratici Quando il browser espone crypto.getRandomValues l'output è adatto per token e shuffling; se è disponibile solo il generatore standard i valori sono comunque ben distribuiti ma non dovrebbero essere utilizzati per i segreti.
Come posso generare numeri casuali univoci senza ripetizioni?
Abilita l'opzione unique-only prima di generare Lo strumento quindi disegna senza sostituzione, quindi ogni numero nel batch è diverso Se chiedi più numeri interi univoci di quelli che l'intervallo può contenere, ti dice invece di eseguire il looping per sempre.
Può generare numeri decimali?
Sì. Disattiva l'opzione intera e imposta quante cifre decimali desideri I decimali vengono estratti dall'intervallo semiaperto che include il minimo ma non il massimo, che è la convenzione standard per gli intervalli continui.
Posso usare numeri negativi?
Sì. Inserisci un minimo negativo, un massimo negativo o un intervallo che si estende su zero, ad esempio da -50 a 50. il generatore gestisce gli intervalli negativi e misti nello stesso modo in cui gestisce quelli positivi.
Quanti numeri posso generare contemporaneamente?
Fino a 10.000 numeri per lotto Il risultato include la somma e la media in modo da poter controllare i lotti di grandi dimensioni a colpo d'occhio e l'intero elenco viene copiato come valori separati da newline.
Questo generatore di numeri casuali è gratuito e privato?
Sì. è gratuito senza iscrizione e senza limite di utilizzo e ogni numero viene generato nel browser. Nessun intervallo, conteggio o risultato viene mai trasmesso a un server.
Per cosa posso usare un generatore di numeri casuali?
Gli usi comuni includono la scelta dei numeri della lotteria o della lotteria, il lancio dei dadi per i giochi, la scelta di un vincitore casuale, il seeding dei dati dei test, il campionamento delle righe per l'analisi e la randomizzazione dell'ordine di un elenco. La modalità unica copre qualsiasi caso che necessita di campionamento senza ripetizioni.



