Javascript: Generiere eine Zufallszahl innerhalb eines Bereichs mit crypto.getRandomValues

8

Ich verstehe, dass Sie mit dieser Funktion eine Zufallszahl in JavaScript innerhalb eines Bereichs generieren können:

%Vor%

Mit freundlicher Genehmigung von Ionuţ G. Stan hier .

Was ich wissen möchte, ist, wenn Sie mit crypto.getRandomValues ​​() anstelle von Math.random (). Ich möchte in der Lage sein, eine Zahl zwischen 0 und 10 einschließlich oder 0 - 1 oder sogar 10 - 5000 einschließlich zu erzeugen.

Sie werden feststellen, dass Math.random () eine Zahl wie folgt erzeugt: 0.8565239671015732 .

Die getRandomValues-API gibt möglicherweise Folgendes zurück:

  • 231 mit Uint8Array(1)
  • 54328 mit Uint16Array(1)
  • 355282741 mit Uint32Array(1) .

Wie kann ich das also in eine Dezimalzahl zurückübersetzen, damit ich mit dem gleichen Bereichsalgorithmus weitermachen kann? Oder brauche ich einen neuen Algorithmus?

Hier ist der Code, den ich ausprobiert habe, aber es funktioniert nicht so gut.

%Vor%

Am unteren Ende (Bereich 0 - 1) gibt es mehr 0 als 1 zurück. Was ist der beste Weg, um es mit getRandomValues ​​() zu machen?

Vielen Dank

    
user2503552 14.08.2013, 11:14
quelle

2 Antworten

11

Der einfachste Weg ist wahrscheinlich die Zurückweisungsstichprobe (siehe Ссылка ). Angenommen, max - min ist kleiner als 256:

%Vor%     
arghbleargh 14.08.2013, 11:25
quelle
1

IMHO, der einfachste Weg, eine Zufallszahl in einem [min..max] -Bereich mit window.crypto.getRandomValues() zu erzeugen, wird beschrieben hier .

Ein ECMAScript 2015-Syntax-Code, falls der Link TL; TR :

ist %Vor%     
sindilevich 18.02.2017 23:01
quelle