Zufallszahlengenerator
Zufallszahlen in einem Bereich mit Optionen für Einzigartigkeit und Sortierung generieren.
Geprüft von ZeroUtil Editorial Team · Zuletzt geprüft
Den Zufallszahlengenerator verwenden
- Min und Max festlegen, um einen inklusiven Bereich zu definieren. Negative Zahlen und Dezimalzahlen werden beide akzeptiert.
- Auswählen, wie viele Zahlen generiert werden sollen, mit dem Anzahl-Feld, von 1 bis 1000. Das Steuerelement ist nur ein Zahlenfeld, sodass du große Anzahlen einfügen kannst, anstatt eine Schaltfläche gehalten zu halten.
- Die Options-Kontrollkästchen umschalten: Duplikate erlauben erlaubt Wiederholungen, Ergebnisse sortieren ordnet die Ausgabe aufsteigend, und Nur ganze Zahlen beschränkt auf ganze Zahlen statt Gleitkommazahlen.
- Auf "Generieren" drücken. Das Ergebnis-Raster füllt sich sofort; jede Zahl ist in einer eigenen Zelle, sodass du einen einzelnen Wert per Klick kopieren kannst, oder verwende die Schaltfläche "Alle kopieren" für einen kommagetrennte Dump.
- So oft neu generieren wie gewünscht. Das Tool zieht bei jedem Mal neue Entropie, sodass aufeinanderfolgende Läufe nicht wiederholt werden.
Welche Zufallsquelle verwendet wird
Das Tool verwendet crypto.getRandomValues, die kryptographisch sichere Schnittstelle, die von der Web Crypto API auf jedem modernen Browser bereitgestellt wird. Für ganze Zahl-Ausgabe fordert es ein Uint32Array an und ordnet dann jeden 32-Bit-Wert mit Ablehnungsstichprobe in den Zielbereich ein, um Modulo-Verzerrung zu vermeiden. Für Gleitkomma-Ausgabe ruft es getRandomValues auf einem Uint32Array auf und konvertiert in eine gleichmäßig verteilte Gleitkommazahl in [0, 1), indem durch 232 geteilt wird, was die Gleichmäßigkeit besser bewahrt als die gängige Math.random()-basierte Abkürzung.
Der Unterschied ist wichtig. Math.random() in V8 verwendet einen xorshift128+-PRNG, der beim Tab-Erstellen geseedet wird; er ist für gängige Spiele und UI-Mischungen in Ordnung, gibt aber vorhersagbare Sequenzen aus, sobald ein paar Ausgaben bekannt sind, und seine Gleichmäßigkeit über große Bereiche ist schwächer als eine geeignete kryptographische Quelle. crypto.getRandomValues leitet auf den Betriebssystem-CSPRNG um (unter Linux getrandom(2); auf macOS /dev/urandom; auf Windows BCryptGenRandom) und ist für Token-Generierung, Stichprobenentnahme ohne Vorhersagbarkeit und alles geeignet, wo ein Angreifer möglicherweise Ausgaben beobachtet. Die gesamte Generierung läuft clientseitig; nichts wird an einen Server gesendet.
Echte Aufgaben, für die das nützlich ist
- Einen Gewinner einer Verlosung oder eines Gewinnspiels aus einer nummerierten Eintrags-Liste auswählen.
- Eine Test-Fixture mit reproduzierbar aussehenden Daten seeden, die tatsächlich unvorhersagbar sind.
- Einen kleinen Satz nicht-doppelter Lottozahlen für einen gelegentlichen Pool generieren.
- Eine gemischte Stichprobe für die Qualitätskontrolle erstellen - z. B. 20 Bestellungs-IDs aus einem größeren Bereich zur Stichprobenprüfe.
- Einen zufälligen Tick-Plan für einen Lasttest erstellen, der nicht auf runden Intervallen liegen sollte.
- Testgehälter, -alter oder -preise für ein UI-Mockup erfinden, ohne echte Daten zu gefährden.
Häufige Fallstricke
- Modulo-Verzerrung. Naiver Code, der einen 32-Bit-Zufallswert mit
value % rangeabbildet, repräsentiert das untere Ende zu stark, wennrangenicht gleichmäßig 232 teilt. Das Tool lehnt stattdessen Ausreißer ab, was auf dem Papier langsamer ist, aber in der Praxis nicht wahrnehmbar. - Duplikate, wenn du sie nicht wolltest. Deaktiviere Duplikate erlauben. Das Tool gibt dann einen Fehler aus, wenn deine Anzahl die verfügbaren verschiedenen ganzen Zahlen im Bereich überschreitet.
- Gleitkomma-Präzision. Gleitkommazahlen verwenden IEEE 754 binary64, sodass nicht jeder Dezimalwert in deinem Bereich darstellbar ist. Zwei Aufrufe können durch Rundung auf denselben nominalen Dezimalwert landen.
- Bereichsgrenzen. Sowohl Min als auch Max sind inklusiv. Wenn du halboffenes Verhalten wie die meisten Programmierbibliotheken haben möchtest (z. B. Pythons
range), subtrahiere 1 von deinem Max. - Sortieren verbirgt Duplikate. Mit Ergebnisse sortieren und Duplikate erlauben aktiviert, landen identische Werte nebeneinander und sind leicht zu übersehen; prüfe vor der Interpretation.
- Sehr große Anzahlen (nahe an 1000) mit nur-einzigartiger Option und einem kleinen Bereich können einen sichtbaren Moment dauern, weil die Ablehnungsstichprobenschleife bereits gezogene Werte vermeiden muss.
Was "Zufällig" hier wirklich bedeutet
Eine Zufallszahlenquelle hat zwei wichtige Eigenschaften: Gleichmäßigkeit (jeder Wert im Bereich ist gleich wahrscheinlich) und Unvorhersagbarkeit (zukünftige Ausgaben können nicht aus vergangenen abgeleitet werden, selbst mit unbegrenzter Rechenleistung). Math.random() liefert das Erste, aber nicht das Zweite; ein CSPRNG liefert beides. Die NIST SP 800-90A und 800-90B Dokumente definieren den Standard für kryptographische DRBGs, und crypto.getRandomValues ist nach diesem Standard durch die W3C Web Cryptography API (TR 2017, letzte wichtige Revision 2024) spezifiziert. Für Würfel, Karten und alltägliches Mischen ist der Unterschied unsichtbar; für alles, was potenziell angegriffen werden könnte - Session-Tokens, Einmalpasswörter, Spielseeds, wo ein Angreifer von Vorhersage profitiert - ist der Unterschied kritisch.
Alternativen und Kompromisse
Befehlszeilen-Alternativen umfassen shuf -i 1-100 -n 10 für eine gemischte Stichprobe (GNU coreutils), jot -r 10 1 100 auf macOS und BSDs, Pythons secrets.choice und random.sample, und openssl rand für rohe Bytes. Für reproduzierbar-mit-Seed-Generierung möchtest du numpy.random.default_rng(seed) oder Julias Random.MersenneTwister(seed); dieses Tool stellt bewusst keinen Seed bereit, weil das Seeden eines CSPRNG seinen Zweck zunichte macht. Tabellenkalkulationen haben RAND und ZUFALLSBEREICH, beide basieren auf engine-spezifischen PRNGs, die für nichts Adversariales vertraut werden sollten. Dedizierte Hardware-Quellen (HRNGs) wie Intel RDRAND oder der ID Quantique Quanten-RNG sind für nicht-kryptographische Anwendungen übertrieben, existieren aber, wenn du eine zertifizierte Entropiequelle benötigst.
Häufig gestellte Fragen
Ist das für kryptographische Verwendung wie das Generieren von Tokens geeignet?
Für die Generierung von Session-Tokens, API-Schlüsseln oder Passwort-Reset-Nonces ist die zugrundeliegende Quelle (<code>crypto.getRandomValues</code>) geeignet - es ist dasselbe CSPRNG, das du in einer dedizierten Bibliothek verwenden würdest. Für den Produktionseinsatz möchtest du diese Tokens jedoch normalerweise serverseitig generieren, wo Länge, Zeichensatz und Rate-Limit-Kontrollen durchgesetzt werden können. Dieses Tool ist für einen Wegwerf-Testschlüssel oder eine einmalige Demo in Ordnung, aber es ist kein revisionierbarer Token-Mint.
Was ist der Unterschied zwischen Math.random() und crypto.getRandomValues?
<code>Math.random()</code> ist ein nicht-kryptographischer Pseudozufallsgenerator (xorshift128+ in V8, xorshift in SpiderMonkey, eine SIMD-freundliche Variante in JavaScriptCore). Er ist deterministisch, sobald er geseedet ist, und seine zukünftigen Ausgaben können von einem Angreifer vorhergesagt werden, der genug vorherige Ausgaben beobachtet hat. <code>crypto.getRandomValues</code> wird vom Betriebssystem-CSPRNG unterstützt und ist darauf ausgelegt, selbst für einen Beobachter mit unbegrenzter Rechenleistung nicht von echter Zufälligkeit zu unterscheiden. Dieses Tool verwendet Letzteres.
Sendet die Seite meinen Bereich oder meine Anzahl an irgendeinen Server?
Nein. Der gesamte Generator läuft in einer Preact-Insel, die mit <code>client:load</code> geladen wird. Der <code>crypto.getRandomValues</code>-Aufruf ist eine synchrone lokale API, die das Netzwerk nie berührt, und die Benutzeroberfläche sendet deine Eingaben nirgendwo per POST. Prüfe den DevTools-Netzwerk-Tab während einer Generierung - null ausgehende Anfragen.
Was passiert, wenn ich mehr eindeutige ganze Zahlen anfordere, als der Bereich erlaubt?
Das Tool erkennt die Unmöglichkeit (Anzahl > max - min + 1 wenn <em>Duplikate erlauben</em> deaktiviert ist) und meldet sie vor der Generierung. Anstatt stillschweigend zu duplizieren oder in einer unendlichen Ablehnungsschleife zu hängen, erhältst du sofort eine Validierungsmeldung. Erweitere den Bereich oder aktiviere Duplikate, um fortzufahren.
Wie vermeidet das Tool Modulo-Verzerrung?
Die naive Berechnung von <code>rawU32 % range</code> repräsentiert kleinere Werte leicht zu stark, weil 2<sup>32</sup> einen benutzerdefinierten Bereich selten gleichmäßig teilt. Das Tool berechnet das größte Vielfache von <code>range</code> unterhalb von 2<sup>32</sup>, lehnt jeden Abruf über dieser Schwelle ab und wiederholt den Vorgang. Die Ablehnungswahrscheinlichkeit ist höchstens <code>range / 2</code><sup>32</sup>, was für jeden realistischen Bereich unter eins in einer Million liegt.
Kann ich reproduzierbare Ergebnisse mit einem Seed erhalten?
Nein, und das ist eine bewusste Design-Entscheidung. Ein CSPRNG, der mit einem bekannten Wert geseedet wurde, ist nicht mehr kryptographisch sicher, weil ein Beobachter mit dem Seed alle Ausgaben wiederholen kann. Wenn du Reproduzierbarkeit für Tests oder Simulationen benötigst, verwende eine seedbare PRNG-Bibliothek wie seedrandom.js, numpy oder <code>Math.seedrandom</code>, und akzeptiere, dass sie nicht kryptographisch stark ist.
Wie gleichmäßig ist die Gleitkomma-Ausgabe?
Sehr gleichmäßig. Das Tool liest eine vorzeichenlose 32-Bit-Ganzzahl, teilt durch 2<sup>32</sup>, um einen Wert in [0, 1) zu erhalten, und skaliert dann auf den Zielbereich. Der Abstand zwischen darstellbaren Ausgaben in [0, 1) ist daher 2<sup>-32</sup>, was viel feiner ist als die sichtbare sechsstellige Dezimalanzeige. Jeder Wert im Bereich hat dieselbe Wahrscheinlichkeit innerhalb von 2<sup>-32</sup>.
Warum interagiert das Sortieren mit Duplikaten?
Wenn beide Optionen aktiviert sind, landen Duplikate nach dem Sortieren nebeneinander und können wie ein Anzeigefehler aussehen. Das sind sie nicht - beide sind echte Ausgaben und die Häufigkeit ist in Erwartung korrekt. Wenn du Duplikate von Singletons unterscheiden möchtest, entweder zuerst sortieren und durchsuchen, oder Duplikate deaktivieren und die Eindeutigkeitsgarantie arbeiten lassen.
Was ist die maximale Anzahl und warum?
Das Tool begrenzt auf 1000 Zahlen pro Generierung. Jeder Abruf kostet entweder 4 Bytes Entropie (für ganze Zahlen) oder einen 32-Bit-Abruf plus eine Division (für Gleitkommazahlen), sodass die harte Rechengrenze viel höher ist, aber 1000 ist der Punkt, an dem der Ausgabebereich nicht mehr durchsuchbar ist. Für sehr große Datensätze verwende eine Skriptsprache, mit der du in eine Datei streamen kannst.
Ist der Generator für sehr kleine Bereiche fair?
Ja. Für einen Bereich der Größe 2 liest die Ablehnungsstichprobenschleife effektiv ein einzelnes Bit und ist perfekt gleichmäßig. Für einen Bereich der Größe 6 (ein würfelgroßer Bereich) wäre die Verzerrung in einem naiven Modulo-Ansatz etwa 4 Teile in 2<sup>32</sup>, was für Spielzwecke irrelevant ist, aber der Ablehnungsstichprobenpfad eliminiert sogar das. Siehe die dedizierte Würfel-Roller-Seite für eine auf Tischspiele ausgerichtete Variante.
Verwandte Tools
- Zufallsfarb-Generator
Zufallsfarben mit HEX-, RGB- und HSL-Werten generieren. Zufallsfarbwähler, Farb-Randomisierer und 5-Farben-Palette-Builder mit Verlauf.
- Zufälliger Zeichenkettengenerator
Zufällige Zeichenketten mit konfigurierbarer Länge und Zeichensatz generieren.
- Zufälliger Namensgenerator
Zufällige Vor- und Nachnamen mit Optionen für Geschlecht, echte, Fantasy- oder Firmennamen-Typen generieren.
- Text-Sortierer
Zeilen alphabetisch, numerisch, nach Länge oder zufällig sortieren.
- Fibonacci-Folgen-Generator
Fibonacci-Zahlen bis zu beliebiger Länge generieren.
- Glückskeks
Öffne einen virtuellen Glückskeks, um ein zufälliges Glück mit Glückszahlen zu enthüllen. Über 50 einzigartige Sprüche.
Mehr Math & Calculators
Age Calculator
Calculate exact age in years, months and days from a birthdate.
Open toolArea & Volume Calculator
Calculate area of 2D shapes and volume of 3D solids.
Open toolBMI Calculator
Calculate your Body Mass Index and find your weight category.
Open toolByte / Bit Converter
Convert between bits, bytes, KB, MB, GB, TB and PB.
Open toolDiscount Calculator
Calculate discount amount, sale price, savings, and discounted value with optional sales tax. Supports stacked coupons.
Open toolFibonacci Sequence Generator
Generate Fibonacci numbers up to any length.
Open tool