Kennis

Hoe werkt willekeur? Van dobbelsteen tot crypto.getRandomValues

“Gewoon random” bestaat niet — er zijn gradaties, en de verschillen bepalen of een loting eerlijk is. Een rondleiding langs dobbelstenen, algoritmes en de randombron in je browser.

8 min lezen · bijgewerkt 14 juli 2026

Fysieke willekeur: goed genoeg voor spelletjes

Een dobbelsteen is een klein natuurkundig experiment: worp, stuiter, wrijving. Onvoorspelbaar genoeg voor Mens-erger-je-niet, maar zelden écht eerlijk — gietfouten en afgeronde hoeken maken sommige zijden meetbaar waarschijnlijker, en een muntje dat je opgooit landt nét iets vaker op de kant die boven begon. Voor de meeste spellen is dat prima. Voor een loting met een prijs wil je beter.

Pseudo-willekeur: Math.random() en waarom het niet volstaat

Computers zijn deterministisch, dus "willekeur" uit een computer is meestal pseudo-willekeur: een algoritme dat vanaf een startwaarde (seed) een reeks getallen uitrekent die willekeurig oogt. JavaScript's Math.random() is zo'n generator. Snel en prima voor animaties — maar wie de interne staat kent, kan de hele reeks voorspellen, en de browser geeft geen enkele garantie over de kwaliteit. Voor een winactie is "waarschijnlijk wel goed" een raar fundament.

Cryptografische willekeur: de bron voor sleutels — en lotingen

Elke moderne browser heeft daarnaast crypto.getRandomValues(): een randombron die entropie uit het besturingssysteem gebruikt (timing van hardware-events, en vaak hardware-randomgeneratoren) en die geschikt is verklaard voor cryptografie — er worden encryptiesleutels en beveiligingstokens mee gemaakt. Niet te voorspellen, niet te reproduceren, ook niet door de maker van de website. Alles op Online Rad gebruikt uitsluitend deze bron; op Eerlijk loten kun je dat live controleren met tienduizend draaien in je eigen browser.

De valkuil na de bron: modulo-bias

Een perfecte randombron kan alsnog een oneerlijke uitkomst opleveren door slordige verwerking. Klassiek voorbeeld: je hebt een willekeurig getal van 0 tot 4.294.967.295 en wilt er "een getal van 1 t/m 6" van maken door de rest na deling te nemen. Omdat 4.294.967.296 niet deelbaar is door 6, komen lage uitkomsten een fractie vaker voor — modulo-bias. De nette oplossing heet rejection sampling: getallen boven de laatste volledige "ronde" van 6 gooi je weg en je trekt opnieuw. Ons cijferrad en de nummer-generator doen precies dat.

Wat eerlijkheid betekent voor een draaiend rad

Bij een rad komt er nog één ontwerpkeuze bij: wanneer valt de beslissing? Bij een eerlijk rad wordt de winnaar bepaald op het moment dat je klikt — daarna draait de animatie naar die uitkomst toe. Timing en zwierkracht zijn dan show. Andersom (animatie eerst, uitkomst "waar hij stopt") opent de deur naar near-miss-trucjes zoals gokkasten die gebruiken: nét naast de hoofdprijs stoppen voelt spannend, maar de kansen zijn dan allang niet meer wat de vakken suggereren. Zichtbare vakgrootte = echte kans: dat is de hele belofte, en die kun je alleen waarmaken met de volgorde beslissing-eerst.

Echt toeval is klonterig

Tot slot de menselijke valkuil: wij verwachten dat toeval er "netjes verdeeld" uitziet, maar echt toeval klontert. Drie keer achter elkaar dezelfde naam bij tien draaien is geen bug — het is precies wat willekeur doet op kleine aantallen. Pas over duizenden trekkingen convergeert elk vak naar zijn verwachte percentage. Zie je een rad dat elke tien draaien keurig verdeeld uitkomt, wees dan juist achterdochtig: dan wordt er gestuurd.

Direct aan de slag