Nur vollständig zuverlässige Antwort, die vollständige Zufälligkeit ohne Verlust bietet. Die anderen vor dieser Antwort verlieren alle, je nachdem, wie viele Zeichen Sie möchten. Je mehr Sie wollen, desto mehr verlieren sie die Zufälligkeit.
Sie erreichen dies, indem sie die Anzahl der möglichen Zahlen vor der festen Länge begrenzen.
So wäre beispielsweise eine Zufallszahl mit fester Länge 2 10 - 99. Für 3 100 - 999. Für 4 1000 - 9999. Für 5 10000 - 99999 und so weiter. Wie aus dem Muster ersichtlich ist, deutet dies auf einen Zufallsverlust von 10% hin, da Zahlen davor nicht möglich sind. Warum?
Für wirklich große Zahlen (18, 24, 48) sind 10% immer noch eine Menge Zahlen , die man verlieren muss.
function generate(n) {
var add = 1, max = 12 - add;
if ( n > max ) {
return generate(max) + generate(n - max);
}
max = Math.pow(10, n+add);
var min = max/10;
var number = Math.floor( Math.random() * (max - min + 1) ) + min;
return ("" + number).substring(add);
}
Der Generator ermöglicht eine unendliche Länge ohne Verlust an Präzision und mit minimalen Leistungskosten.
Beispiel:
generate(2)
"03"
generate(2)
"72"
generate(2)
"20"
generate(3)
"301"
generate(3)
"436"
generate(3)
"015"
Wie Sie sehen können, ist anfangs sogar die Null enthalten, was einen zusätzlichen Verlust von 10% darstellt , abgesehen von der Tatsache, dass Zahlen vor 10 ^ n nicht möglich sind.
Das sind jetzt insgesamt 20%.
Außerdem haben die anderen Optionen eine Obergrenze für die Anzahl der Zeichen, die Sie tatsächlich generieren können.
Beispiel mit Kosten:
var start = new Date(); var num = generate(1000); console.log('Time: ', new Date() - start, 'ms for', num)
Protokolle:
Time: 0 ms for 7884381040581542028523049580942716270617684062141718855897876833390671831652069714762698108211737288889182869856548142946579393971303478191296939612816492205372814129483213770914444439430297923875275475120712223308258993696422444618241506074080831777597175223850085606310877065533844577763231043780302367695330451000357920496047212646138908106805663879875404784849990477942580056343258756712280958474020627842245866908290819748829427029211991533809630060693336825924167793796369987750553539230834216505824880709596544701685608502486365633618424746636614437646240783649056696052311741095247677377387232206206230001648953246132624571185908487227730250573902216708727944082363775298758556612347564746106354407311558683595834088577220946790036272364740219788470832285646664462382109714500242379237782088931632873392735450875490295512846026376692233811845787949465417190308589695423418373731970944293954443996348633968914665773009376928939207861596826457540403314327582156399232931348229798533882278769760
Mehr Hardcore:
generate(100000).length === 100000 -> true