Behöver du dra en vinnare i en tävling, välja vilken elev som ska svara, eller bestämma vem som är fikaansvarig? Denna gratis, slumpmässiga väljare drar rättvist från vilken lista du än klistrar in. Lägg in dina poster i fältet ”Objekt” — en per rad, eller separerade med kommatecken — ställ in hur många du vill ha med ”Antal”, och tryck på ”Generera”. En lista kräver minst två poster och rymmer upp till 1000, där varje kan vara upp till 200 tecken lång.
Varje val görs direkt i din webbläsare med hjälp av Web Crypto API (crypto.getRandomValues), som ger kryptografiskt säkra slumpvärden från ditt operativsystems underliggande slumpprocesser. Din lista skickas aldrig till en server, sparas aldrig i en logg, och ses aldrig av oss — och det är viktigare här än på de flesta andra väljare, eftersom det folk klistrar in oftast är en kundlista, en klasslista eller namnen på kollegor. Knappen ”Ladda från fil” håller samma löfte: din webbläsare läser filen och fyller fältet lokalt, och ingenting laddas upp någonstans.
Alternativen är gjorda för de listor folk faktiskt har. ”Avgränsare” står på ”Automatiskt”, vilket skiljer på radbrytningar och kommatecken på egen hand, så en lista som kopierats från ett kalkylblad, ett chattmeddelande eller ett dokument fungerar utan att du behöver formatera om den. Lås den till ”Radbrytning”, ”Komma” eller ”Mellanslag” när din data blandar format — och observera att ”Mellanslag” alltid är ett medvetet val och aldrig automatiskt, eftersom poster som fullständiga namn innehåller egna mellanslag, och om man automatiskt delade upp dem skulle det förstöra fler listor än det fixade. ”Antal” bestämmer hur många poster som ska dras, från 1 till 100. Ska du dra tre vinnare bland 200 deltagare? Klistra in deltagarna, ställ in ”Antal” på 3, och tryck på ”Generera”. Två inställningar gäller endast när antalet är 2 eller mer och är utgråade fram tills dess: ”Inga dubbletter”, som avgör om samma post kan dras två gånger, och ”Utdataformat”, som bestämmer hur de valda posterna separeras — ”En per rad”, ”Separerade med mellanslag” eller ”Separerade med kommatecken”.
En rad knappar inuti fältet ”Objekt” låter dig göra ändringar du annars skulle göra någon annanstans. ”Ladda från fil” hämtar en lista direkt från en vanlig textfil eller CSV-fil. ”Blanda” ändrar ordningen på posterna i fältet, ”Sortera” ordnar dem alfabetiskt med siffror i naturlig ordning (ett klick till vänder på ordningen), och ”Rensa” tömmer fältet. Knappen ”Fyll med exempeldata” lägger in en kort exempellista så att du kan prova väljaren med ett klick, medan ”Expandera för att passa innehåll” vecklar ut fältet för att visa en lång lista i sin helhet och ”Komprimera till standardstorlek” fäller ihop det igen. Under resultatet lägger ”Kopiera alla” varje valt objekt på dina urklipp, ”Spara till fil” sparar ner dem till datorn, och ”Historik” behåller dina 10 senaste dragningar i webbläsaren, så att ett tidigare resultat bara är ett klick bort.
Hur görs dragningen egentligen? När du trycker på ”Generera”, ber sidan webbläsaren om slumpvärden via crypto.getRandomValues och använder dem för att välja positioner i din lista, i stället för att gå genom en pseudoslumpmässig JavaScript-funktion som Math.random(). Att göra om ett rått 32-bitarsvärde till en position är där många väljare i tysthet gör fel: att ta värdet modulo listans längd är den uppenbara metoden och den som skapar skevhet, eftersom om inte listans längd går jämnt upp i 2^32, kommer poster nära början av listan att dyka upp aningen oftare än resten. Den bristen kallas modulo-skevhet (modulo bias), och den är mätbar snarare än teoretisk. Den här väljaren förkastar i stället varje värde som överstiger den största exakta multipeln av listlängden och drar på nytt — en teknik som kallas förkastningssampling (rejection sampling). Det kostar några extra dragningar och ger en exakt garanti i stället för en ungefärlig. Positionen i listan förändrar ingenting: den första posten och den sista har exakt samma sannolikhet i varje dragning.
”Inga dubbletter” skiljer mellan två genuint olika typer av dragningar, och statistiken har ett namn för var och en. När den är på, blandar väljaren en kopia av din lista med Fisher-Yates-algoritmen och plockar posterna från toppen — samma sak som att dra lotter ur en hatt utan att lägga tillbaka dem, så att ingen dras två gånger och varje grupp av den storleken är lika sannolik. Det kallas dragning utan återläggning (sampling without replacement), och det är vad du vill ha för pristagare, lag och turordning. När den är av görs varje val oberoende av hela listan, så att samma post kan dyka upp mer än en gång — dragning med återläggning (sampling with replacement), vilket är vad du vill ha när alla förblir valbara i varje omgång, som vid upprepade lottdragningar eller ett snabbt statistiskt urval. Ingen av metoderna är mer rättvis än den andra; de svarar på olika frågor.
En rättvis dragning ska inte se rättvis ut. Dra fem namn av tio och du kommer regelbundet att se två val som stod bredvid varandra i den ursprungliga listan, eller samma namn två gånger i rad när dubbletter är tillåtna, och allt detta är helt normalt. Varje dragning är oberoende: tidigare val har ingen som helst inverkan på senare val, och ingen har någonsin en vinst ”till godo”. Instinkten som påstår motsatsen är spelares felslut (gambler's fallacy), och det är samma instinkt som gör oss dåliga på att själva välja slumpmässigt — om vi blir ombedda att välja på måfå undviker vi den första och den sista posten, vi undviker att upprepa ett namn, och vi sprider våra val mycket jämnare än vad slumpen någonsin gör. Ett resultat som ser misstänkt snyggt ut är ett mänskligt fingeravtryck; äkta slumpmässighet skapar klumpar.
Varför välja den här slumpmässiga väljaren?
- Dragning enbart i webbläsaren: din lista läses på din enhet och skickas aldrig iväg
- Web Crypto API-slumpmässighet: kryptografiskt säker, inte Math.random()
- Ingen modulo-skevhet: förkastningssampling håller varje post lika sannolik
- Valfritt listformat: en per rad, med kommatecken eller mellanslag, utan omformatering
- ”Inga dubbletter”-läge: dra vinnare eller lag utan att någon väljs två gånger
- Upp till 1000 poster, och upp till 100 val i en enda dragning
- Inbyggda listverktyg: ladda från fil, blanda, sortera, rensa, exempeldata
- Historik och Spara till fil: behåll ett register över en dragning du kan behöva försvara
- Obegränsad och gratis: ingen registrering, inga användningsgränser, ingenting på våra servrar
Slumpmässiga dragningar dyker upp varhelst ett val måste kunna tåla att ifrågasättas. Lärare väljer elever utan att favorisera och delar in klassen i projektgrupper. Streamers och marknadsförare drar vinnare i giveaways inför en publik som måste tro på resultatet. Chefer delar ut uppgifterna som ingen anmäler sig frivilligt till, och team bestämmer ordningen för presentationer eller vem som har bakjour. Forskare drar ett slumpmässigt urval av poster för granskning. Familjer avslutar bråket om vad man ska titta på, och en hungrig grupp väljer restaurang. Den gemensamma nämnaren är ett val som vem som helst kan förklara efteråt: dragningen använder kryptografisk slumpmässighet, den sker helt och hållet på din enhet, och ”Historik” behåller resultatet ifall någon frågar om det senare.
Denna väljare har några få ärliga begränsningar som är värda att känna till. Den kan inte dra fler unika poster än vad din lista innehåller — tre vinnare kräver minst tre namn — och den stannar vid 1000 poster på 200 tecken vardera, med upp till 100 val i en dragning. ”Blanda” och ”Sortera” fungerar rad för rad, så en kommaseparerad lista inklistrad på en enda rad omordnas först när den delats upp till en post per rad; och båda dessa knappar ändrar ordningen i fältet snarare än i själva dragningen, som är lika rättvis oavsett vilken ordning dina poster står i. Varje post har också exakt samma vikt i systemet, så om ett namn ska räknas dubbelt måste det namnet listas två gånger. Inom dessa gränser är garantin stark — varje enskild post i din lista har exakt samma chans, i varje enskild dragning.