Ho bisogno di generare ID univoci per più frasi in una narrazione più lunga (in cui più utenti possono eseguire la stessa azione, allo stesso tempo, su macchine diverse).Genera e concatena 3 valori Math.random() più casuali di 1 valore Math.random()?
ho pensato di fare new Date().getTime()
(e, forse, concatenando una username
), ma come gli id sono stati generati in un ciclo, mentre l'iterazione di frasi, ho trovato i duplicati sono stati creati (come generazione potrebbe avvenire allo stesso millisecondo).
Così Attualmente sto giocando intorno con:
var random1 = Math.floor((Math.random() * 10000) + 1).toString(36);
var random2 = Math.floor((Math.random() * 10000) + 1);
var random3 = Math.floor((Math.random() * 10000) + 1);
var id = random1 + random2 + random3;
// generates things like:
// 1h754278042
// 58o83798349
// 3ls28055962
Mi venne in mente anche se (è vero, come qualcuno che non ha riflettuto/casuali questioni di crittografia/unici molto), che forse unendo tre numeri casuali isn' t più casuale di un numero casuale?
È la generazione e il concatenamento di 3 valori Math.random()
più casuali rispetto al valore 1 Math.random()
?
questa risposta (https://security.stackexchange.com/a/124003) afferma:
Se il generatore di numeri casuali davvero produce dati casuali, allora non lo farà materia.
Ma non sono sicuro di come si applica l'utilizzo di Math.random()
.
Edit:
Scenario è il lato client sul web e non per la sicurezza, solo per garantire che ogni frase ha un ID univoco nel database.
Edit:
ho finito di attuazione:
function guid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
var id = guid();
Da: https://stackoverflow.com/a/105074/1063287
Vedere anche commentare la risposta:
In realtà, la RFC permette UUID creati a caso numeri. Devi solo spostare un paio di bit per identificarlo come tale. Vedere la sezione 4.4. Algoritmi per la creazione di un UUID da Truly casuale o pseudo-casuale di numeri: rfc-archive.org/getrfc.php?rfc=4122
Questo esegue il lato client sul Web e hai in programma di usarlo per sicurezza? – Liam
Sì lato client sul web, e non per sicurezza - solo per garantire che ogni frase abbia un ID univoco nel database. – user1063287
@ user1063287 'Matematica.random() 'scopo non è quello di fornire univocità –