ToolActToolAct

Zufallsauswahltool

Faires Zufallsauswahl-Tool für Verlosungen, Auswahlen und Ziehungen

Auswahl-Einstellungen
Duplikate erlauben
Wenn aktiviert, kann dieselbe Option mehrfach ausgewählt werden
Gesamtoptionen: 0
Ausgewählt: 0
Verbleibend: 0
?

Was ist ein Zufallsauswahl-Tool?

Ein Zufallsauswahl-Tool wählt einen Eintrag aus einer Liste aus, ohne dass eine Person manuell entscheidet. Es ist nützlich für Unterrichtsbeteiligung, Reihenfolgen in Meetings, kleine Giveaways, Aufgabenverteilung, Essenswahl, Team-Warm-ups und Situationen, in denen eine sichtbare neutrale Auswahl Verzerrungen reduziert. Diese Seite arbeitet mit einer zeilenweisen Liste, kann die Ziehung animieren, speichert einen lokalen Verlauf und kann Wiederholungen vermeiden, indem gezogene Einträge aus dem verbleibenden Pool entfernt werden. Zufall kann statistisch fair sein, prüft aber keine Identitäten, erkennt doppelte Namen nicht automatisch und liefert keine Audit-Nachweise. Für offizielle Gewinnspiele, Compliance, Teilnahmeberechtigung und Preisvergabe braucht es einen dokumentierten Prozess.

Anleitung

Bedienschritte

  1. Geben Sie die Optionen in das Textfeld ein, eine pro Zeile
  2. Legen Sie die Anzahl der zu ziehenden Elemente fest
  3. Wählen Sie, ob Duplikate erlaubt sein sollen
  4. Klicken Sie auf „Ziehung starten"
  5. Die Ergebnisse erscheinen auf der rechten Seite

Tipps für eine faire Ziehung

  • Geben Sie einen Kandidaten pro Zeile ein und entfernen Sie versehentliche Leerzeichen oder Duplikate, sofern Duplikate nicht absichtlich erlaubt sind.
  • Legen Sie bei öffentlichen Ziehungen vorab die Zufallsbasis, die Duplikatregel und die Neuziehungsregel fest, damit das Ergebnis leichter nachvollziehbar ist.

Anwendungsfälle

Namen oder Einträge aus einer eingefügten Liste ziehenGeben Sie einen Eintrag pro Zeile ein und starten Sie eine rollende Ziehungsanimation, die Browser-Krypto-Zufälligkeit für die Auswahl des Endergebnisses nutzt. Die letzte Ziehung wird prominent angezeigt, während jeder gezogene Eintrag der Reihe nach aufgezeichnet wird. Jede Ziehung ruft crypto.getRandomValues() über den Ganzzahlbereich [0, n) auf, sodass jeder verbleibende Name eine exakte 1/n-Chance hat und der gewählte Index vor Animationsbeginn feststeht — eine Wiederholung derselben Animation würde auf denselben Gewinner landen.
Ziehungen mit oder ohne Wiederholung durchführenSchalten Sie um, ob Einträge mehrfach gewählt werden können. Im Modus ohne Wiederholung werden gezogene Einträge aus dem verfügbaren Pool entfernt und die verbleibende Anzahl angezeigt — nützlich für Verlosungen, Unterrichtsrunden, Aufgaben und Teamzuteilungen. Die beiden Modi haben unterschiedliche Fairness-Eigenschaften: Ohne Wiederholung ist eine vollständige Abdeckung garantiert, während die Ziehung mit Wiederholung bei jedem Durchgang gleiche Wahrscheinlichkeit beibehalten und zweimal hintereinander denselben Namen ziehen kann. Wählen Sie den Modus, der zu den angekündigten Regeln passt.
Den Auswahlstatus über Seitenaktualisierungen hinweg beibehaltenDie Eingabeliste und Ziehungsprotokolle werden in localStorage gespeichert, sodass eine Sitzung eine versehentliche Aktualisierung überlebt. Ergebnisse können als sortierte Liste kopiert oder getrennt von der Quellliste gelöscht werden, wenn eine neue Runde beginnt. Nutzen Sie die dedizierte ‚Aufzeichnungen löschen'-Schaltfläche, um den Verlauf für eine neue Veranstaltung zu löschen und die Kandidatenliste beizubehalten — beide sind unter verschiedenen Schlüsseln gespeichert, und das Löschen eines Schlüssels beeinflusst den anderen nicht.
Geordnete Unterrichtsrunden mit dem Zähler durchführenWechseln Sie in den Modus ohne Wiederholung und lesen Sie das Ziehungsprotokoll, um nachzuverfolgen, welcher Schüler bereits geantwortet hat — die nächste Ziehung ist dann immer jemand, der noch nicht gesprochen hat. Die verbleibende Anzahl unter dem Ergebnis zeigt leicht, wann die Runde fast vorbei ist, und ermöglicht es dem Lehrer, die letzten Fragen zu timen, statt dass die Namen ausgehen. Zurücksetzen auf den Wiederholungsmodus für Warm-up-Schnelldrills, bei denen Wiederholungen in Ordnung sind.
Eine prüfbare Gewinnerliste für kleine Verlosungen exportierenKopieren Sie das Ziehungsprotokoll als sortierte Liste, sodass ein kleines Team-Giveaway einen zeitgestempelten Nachweis jeder Ziehung erhält. Fügen Sie die Quellliste, die Ziehungsregeln und einen Screenshot des Ziehungsbildschirms hinzu — da localStorage browser- und geräteabhängig ist und kein dauerhaftes Aufzeichnungssystem darstellt. Für bezahlte Verlosungen, regulierte Ziehungen oder compliance-sensible Veranstaltungen sollte die Ziehung in einem für Prüfung und Zeugen ausgelegten System durchgeführt werden, nicht allein auf einer Browser-Seite.

Technisches Prinzip

Das Zufallsauswahl-Tool basiert auf der Web Crypto API (W3C, WHATWG), konkret crypto.getRandomValues(typedArray), der einzigen kryptografisch sicheren Zufallsquelle, die in Browsern verfügbar ist. Im Hintergrund ruft der Browser den CSPRNG des Betriebssystems auf: CryptGenRandom auf Windows (AES-256 im CTR-DRBG-Modus seit Windows 10), getrandom(2) auf Linux (das aus demselben ChaCha20-basierten Pool liest, der auch /dev/urandom im Kernel speist), SecRandomCopyBytes auf macOS und die entsprechende Funktion auf iOS, Android und BSD. Die Ausgabe eignet sich für Schlüsselerzeugung, Nonces, Salts, IVs und überall dort, wo Vorhersagbarkeit ein Sicherheitsproblem darstellen würde. Die Unterscheidung „kryptografische Qualität“ ist entscheidend. Math.random() in V8 verwendet xorshift128+ (einen schnellen Algorithmus mit geringer Entropie) und gibt eine 64-Bit-Gleitkommazahl in [0, 1) zurück; ein böswilliger Akteur, der einige Ausgaben beobachtet, kann prinzipiell den 128-Bit-Zustand rekonstruieren und jeden zukünftigen Wert vorhersagen. Dasselbe gilt für SpiderMonkey und JavaScriptCore. Das macht Math.random() ungeeignet für jeden Einsatz, bei dem das Ergebnis unvorhersehbar sein muss — faire Auswahl eines Gewinners, eines Tokens, eines Einmalpassworts, eines Kartenlegs oder einer Prüfstichprobe. crypto.getRandomValues(typedArray) ist die einzige Wahl dafür. Das Abbilden gleichverteilter 32-Bit-Ganzzahlen auf einen gleichverteilten Index in [0, N) ohne Modulo-Bias ist das zweite technische Detail, das korrekte von fehlerhafter Implementierung trennt. Naiv wäre idx = randomUint32 % N falsch: Wenn N kein Teiler von 2³² ist, sind die ersten 2³² mod N-Werte etwas wahrscheinlicher. Der korrekte Algorithmus ist Reject-Sampling: Berechne limit = 2³² - (2³² mod N); ziehe einen 32-Bit-Wert r; falls r >= limit, erneut ziehen; sonst r % N zurückgeben. Der Bias sinkt von O(N / 2³²) auf null. Für N = 2 oder N als Zweierpotenz ist der Modulo exakt, aber Reject-Sampling ist der sichere Standard und kostet im Durchschnitt höchstens eine erneute Ziehung (und terminiert immer). Der Picker speichert die Ergebnisse in localStorage mit einem versionierten Schlüssel, sodass eine Sitzung einen Seitenreload überlebt und der Nutzer den Ziehungsverlauf einsehen kann. Der Verlauf ist nicht verschlüsselt oder signiert — er ist lokal, nicht sicherheitskritisch und einfach zu löschen. Für den Modus ohne Wiederholung zieht der Algorithmus ohne Zurücklegen mittels eines partiellen Fisher-Yates-Shuffle: In Schritt k von N wird Element k mit einem gleichmäßig gewählten Element in [k, N) getauscht und Element k als gezogen gesperrt. Dies ist O(N)-Zeit, O(1) zusätzlicher Speicher und liefert jede Permutation mit gleicher Wahrscheinlichkeit, was die richtige kombinatorische Garantie ist. (Die naive Variante „N-mal ziehen, Wiederholungen verwerfen“ ist ebenfalls korrekt, aber O(N²) und kann bei langen Sitzungen stocken.) Für gewichtete Ziehungen (jede Option hat eigene Wahrscheinlichkeit) ist der Standardalgorithmus die inverse-CDF-Sampling mit einem Präfixsummen-Array: Erstelle eine Präfixsumme der Gewichte, ziehe eine gleichverteilte reelle Zahl in [0, total) und binär-suche nach dem kleinsten i mit prefix[i] >= u. Das ist O(log N) pro Ziehung, und die Präfixsumme wird einmalig pro Änderung aufgebaut. Die Alias-Methode (Walker-Vose) liefert O(1) pro Ziehung auf Kosten von O(N) Setup, was sich nur bei großem N und fester Verteilung lohnt.

  • Zufallsquelle: crypto.getRandomValues(typedArray) — der einzige kryptografisch sichere RNG in Browsern, gestützt durch den CSPRNG des Betriebssystems (AES-256 CTR-DRBG auf Windows 10+, ChaCha20 auf Linux/macOS/iOS/Android).
  • Math.random() ist xorshift128+ auf V8 (und Varianten auf anderen Engines): schnell, aber vorhersagbar. Niemals verwenden für faire Auswahl, Tokens, OTPs oder Prüfstichproben — nur für visuelles Rauschen, Animationen oder nicht-sicherheitsrelevante Stichproben.
  • Unbiased-Index-Mapping: Reject-Sampling statt Modulo. Berechne limit = 2³² - (2³² mod N); falls der Zufalls-uint32 >= limit, erneut ziehen; sonst r % N zurückgeben. Vermeidet den klassischen „Modulo-Bias“, bei dem kurzrange Indizes häufiger auftreten.
  • Ziehungen ohne Wiederholung verwenden partiellen Fisher-Yates-Shuffle in O(N)-Zeit, O(1)-Speicher: In Schritt k Element k mit einem gleichverteilten Element in [k, N) tauschen, dann k sperren. Jede Permutation ist gleichwahrscheinlich.
  • Gewichtete Ziehungen verwenden inverse-CDF-Sampling: Präfixsumme der Gewichte einmal aufbauen, gleichverteilte reelle Zahl in [0, total) ziehen, binär nach dem kleinsten prefix[i] >= u suchen. O(log N) pro Ziehung.
  • Ziehungsverlauf wird in localStorage mit einem versionierten Schlüssel gespeichert, sodass eine Sitzung einen Seitenreload überlebt. Der Verlauf ist nur lokal und nicht sicherheitskritisch — in der UI löschen, wenn fertig.
  • Fisher-Yates vs. „N-mal mit Verwerfen ziehen“: Beide sind in der Verteilung korrekt, aber Fisher-Yates ist O(N) gesamt und O(1) Speicher, während naive Verwerfung im Worst Case O(N²) ist (viele Wiederholungen am Ende einer langen Liste).
  • Ausgabebereich und Typen: getRandomValues akzeptiert Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array — die Seite verwendet immer Uint32Array für den Index-Mapping-Schritt.

Beispiele

Ziehung ohne Wiederholung aus einer Kandidatenliste

Eingabeliste (eine pro Zeile):
  Alice
  Bob
  Charlie
  David
  Eve
  Frank

Duplikate erlauben: AUS    Ziehungen: 3
Ergebnis:
  #1: Charlie
  #2: Alice
  #3: Frank
  (Bob, David, Eve verbleiben im Pool)

Die Seite ruft crypto.getRandomValues() auf einem Uint32Array auf, um
eine gleichverteilte Ganzzahl in [0, n) für jede Ziehung zu erzeugen, wobei n die Anzahl der
verbleibenden Kandidaten ist. Jeder Name hat bei jeder Ziehung dieselbe Wahrscheinlichkeit von 1/n,
und der gewählte Index steht fest, bevor die Animation beginnt.

Ziehung mit Wiederholung und Zeitstempel-Verlauf

Eingabeliste (eine pro Zeile):
  Kopf
  Zahl

Duplikate erlauben: AN    Ziehungen: 5
Ergebnis:
  #1 (14:23:01): Kopf
  #2 (14:23:01): Zahl
  #3 (14:23:01): Kopf
  #4 (14:23:01): Kopf
  #5 (14:23:01): Zahl

Im Wiederholungsmodus kann derselbe Eintrag in aufeinanderfolgenden Ziehungen gezogen werden, und
der Pool schrumpft nie. Der Zeitstempel der Ziehung wird zu jedem Datensatz hinzugefügt, sodass
dieselbe Kandidatenliste über mehrere Runden hinweg wiederverwendet werden kann, während der Verlauf
genau zeigt, wann jede Ziehung erfolgte. Datensätze separat von
der Kandidatenliste löschen - sie werden unter verschiedenen localStorage-Schlüsseln gespeichert.

JavaScript-Snippet für die zugrunde liegende Auswahl

// Wähle einen Index aus [0, n) mit Web Crypto (CSPRNG)
function pickIndex(n) {
  // crypto.getRandomValues liefert einen gleichverteilten 32-Bit-Wert; Modulo n
  // ist hier sicher, weil n bei einer Listen-Ziehung höchstens einige Tausend beträgt,
  // und die Modulo-Verzerrung vernachlässigbar ist (2^32 / n ist groß).
  const buf = new Uint32Array(1);
  crypto.getRandomValues(buf);
  return buf[0] % n;
}

// pickIndex(6) -> z. B. 4   (Charlie im Beispiel oben)
// pickIndex(2) -> 0 oder 1   (Kopf oder Zahl)
//
// Hinweis: Bei riesigen Pools, in denen n sich 2^32 nähert, verwende Rejection Sampling,
// um die Modulo-Verzerrung zu entfernen, z. B.:
//   const limit = Math.floor(0xFFFFFFFF / n) * n;
//   let r; do { crypto.getRandomValues(buf); r = buf[0]; } while (r >= limit);

Fairness-Prüfung über 1.000 Ziehungen

Liste:    ['A', 'B', 'C', 'D']    (4 Einträge, erwarteter Anteil 25,0 %)
Ziehungen: 1.000    Duplikate erlauben: AN
Beobachtet:
  A: 247    (24,7 %)
  B: 256    (25,6 %)
  C: 248    (24,8 %)
  D: 249    (24,9 %)

Ein Lauf mit 1.000 Ziehungen mit crypto.getRandomValues sollte bei jedem Eintrag innerhalb von etwa
+/- 3 Prozentpunkten des erwarteten Anteils landen; größere
Abweichungen (z. B. ein Eintrag bei 35 %) bedeuten meist, dass die Implementierung
Math.random() aufruft oder das Modulo falsch anwendet. Bei einer regulierten
Verlosung speichere die Quellenliste, die Quelle des Zufalls-Seeds (Browser-/OS-
Entropie), den Zeitstempel der Ziehung und eine Zeugensignatur - localStorage
ist kein dauerhaftes Aufzeichnungssystem.

FAQ

Ist die Auswahl wirklich zufällig?

Ja. Die Auswahl nutzt crypto.getRandomValues aus der Web Crypto API, was kryptografisch sicher ist. Jede Option hat die gleiche Wahrscheinlichkeit, sofern du keine Gewichtungen einstellst.

Kann dieselbe Option zweimal hintereinander gezogen werden?

Ja – so funktioniert unabhängige Zufallsauswahl. Bei 5 Optionen liegt die Wahrscheinlichkeit für zwei gleiche Ziehungen hintereinander bei 1/5 = 20 %. Wenn du keine Wiederholungen willst, aktiviere „nach Auswahl entfernen“ – dann wird ohne Zurücklegen gezogen, bis die Liste leer ist.

Wie funktioniert „N Elemente ziehen“?

Standardmäßig wird ohne Zurücklegen gezogen – jedes Element kann pro N-Ziehung höchstens einmal ausgewählt werden. Aktiviere „mit Zurücklegen“, wenn Duplikate okay sind (z. B. N Aufgaben für eine Person ziehen). Im Modus ohne Zurücklegen darf N nicht größer als die Listenlänge sein.

Kann ich Gewichtungen hinzufügen, um die Ziehung zu beeinflussen?

Manche Builds unterstützen Gewichtungen pro Option (z. B. Option A Gewicht 3, Option B Gewicht 1 – A ist 3-mal wahrscheinlicher). Die Seite normalisiert Gewichte zu Wahrscheinlichkeiten. Ohne Gewichtungen hat jede Option die gleiche Wahrscheinlichkeit.

Warum ist das fairer als „aus dem Bauch heraus“ ziehen?

Menschen sind schlecht im Zufall – wir vermeiden tendenziell kürzlich Gewähltes, bevorzugen auffällige Optionen und tendieren unbewusst zu Namen, die wir kennen. Eine Computerziehung schaltet das aus, was Verlosungs-Entscheidungen für Beteiligte fairer wirken lässt.

Wird meine Liste gespeichert?

Manche Builds speichern in localStorage, sodass die Liste im selben Browser erhalten bleibt. Beim Schließen des Tabs oder Browserwechsel geht sie verloren, sofern du sie nicht exportiert hast. Es wird nichts hochgeladen.

Sollte ich es für offizielle Verlosungen nutzen?

Nein. Offizielle Verlosungen, Lotterien und Glücksspielziehungen erfordern prüfbare Zufallsverfahren, oft mit physischer oder zertifizierter RNG-Hardware. Ein allgemeines Web-Tool ist nicht dokumentiert oder auditiert – nutze es nur für Büro-Verlosungen und informelle Ziehungen.