Tarvitsetko nopean ja reilun tavan saada satunnainen luku? Tämä ilmainen, verkossa toimiva satunnaislukugeneraattori generoi yhden luvun – tai kokonaisen listan lukuja – millä tahansa itse valitsemallasi välillä, yksinkertaisesta 1–10-välistä aina miljardien lukujen väleihin asti. Aseta pienin ja suurin arvo kohtiin ”Min” ja ”Maks”, valitse tarvitsemasi lukujen määrä kohdassa ”Määrä” ja paina ”Generoi”. Molemmat ääriarvot sisältyvät tulokseen, joten väliltä 1–10 voi saada sekä ykkösen että kymmenen.
Jokainen tulos syntyy suoraan selaimessasi Web Crypto API:n (crypto.getRandomValues) avulla – se tuottaa kryptografisesti vahvoja satunnaisarvoja käyttöjärjestelmän tarjoamasta satunnaisuuden lähteestä. Mitään ei lähetetä palvelimelle, mitään ei kirjata lokiin, emmekä koskaan näe lukujasi. Generointi tapahtuu välittömästi ja yksityisesti, ja se toimii myös hitaalla yhteydellä sen jälkeen, kun sivu on latautunut.
Asetukset on tehty niitä tilanteita varten, joissa satunnaislukuja oikeasti tarvitaan. Kytke ”Ilman kaksoiskappaleita” päälle, jotta mikään luku ei toistu – juuri se, mitä tarvitset arpajaisissa, palkintoarvonnoissa tai ryhmiin jaossa ilman toistoja. Tarvitsetko kaksikymmentä voittajaa 500 osallistujan joukosta? Aseta ”Min” arvoon 1 ja ”Maks” arvoon 500, kytke ”Ilman kaksoiskappaleita” päälle, aseta ”Määrä” arvoon 20 ja paina ”Generoi”. ”Järjestys” järjestää tuloksen nousevaan tai laskevaan järjestykseen, ja yksi painike kopioi kaikki tulokset. Kun vaihdat ”Tulostusmuodon” asetuksesta ”Rivinvaihto” asetukseen ”Välilyönnillä eroteltu” tai ”Pilkulla eroteltu”, näkyviin tulee ”Sarjojen määrä”: useita riippumattomia arvontoja kerralla – esimerkiksi kaksikymmentä kolmen luvun sarjaa kahteenkymmeneen arpajaiskierrokseen – ja ”Salli duplikaatit sarjojen välillä” päättää, saako sama luku esiintyä useammassa kuin yhdessä niistä.
Miten satunnaisuus oikeastaan syntyy? Selaimesi tuottaa kryptografisesti vahvoja satunnaisarvoja Web Crypto API:n kautta, ei JavaScript-PRNG:n kuten Math.random()-funktion kautta. Kun painat ”Generoi”, sivu pyytää satunnaisarvoja crypto.getRandomValues-funktiolla ja käyttää niitä valitsemallasi välillä olevien lukujen tuottamiseen. Selain ja käyttöjärjestelmä tuottavat satunnaisuuden taustalla, joten sivun ei tarvitse ylläpitää omaa siementä tai pseudosatunnaista jonoa.
Raa'an arvon muuntaminen valitsemallesi välille on kohta, jossa generaattorit menevät hiljaa pieleen, ja se ansaitsee oman kappaleensa. Arvon jakojäännöksen käyttäminen välin koon kanssa vaikuttaa ilmeiseltä ratkaisulta – mutta se aiheuttaa vinoumaa: ellei väli jakaudu tasan lukuun 2^32, pienimmät luvut osuvat kohdalle hieman useammin kuin muut. Tätä vinoumaa kutsutaan nimellä modulo bias, ja se on mitattavissa, ei vain teoreettinen. Tämä generaattori hylkää sen sijaan jokaisen arvon, joka ylittää välin suurimman tasan jakautuvan kerrannaisen, ja arpoo uudelleen – tekniikkaa kutsutaan nimellä rejection sampling. Se maksaa muutaman ylimääräisen arvonnan, mutta ostaa vastineeksi tarkan takuun: jokaisella ”Min”–”Maks”-välin luvulla on täsmälleen sama todennäköisyys, ei vain lähes sama.
Mikä tekee luvusta aidosti satunnaisen? Luku on tarpeeksi satunnainen silloin, kun aiemmat tulokset eivät kerro mitään seuraavasta – ja käytännössä tästä on kolme tasoa. Tavallinen pseudosatunnaisfunktio, kuten Math.random(), ajaa deterministisen algoritmin: kuka tahansa, joka tuntee sen sisäisen tilan, voi toistaa koko sarjan, mikä sopii hyvin diaesityksen sekoittamiseen mutta ei mihinkään, jossa tulosta ei saa pystyä ennustamaan. Kryptografisesti turvallinen generaattori (CSPRNG) – taso, jota tämä työkalu käyttää – on sekin algoritmi, mutta se on suunniteltu tuottamaan ennustamattomia arvoja käyttäen järjestelmän turvallista satunnaisuuden lähdettä, ja rakennettu niin, ettei sen tuotoksen seuraaminen paljasta mitään siitä, mitä on tulossa seuraavaksi. Fyysinen satunnaisuus, kuten ilmakehän kohina tai radioaktiivinen hajoaminen, on molempien yläpuolella, vaikka käytännön ero häviää, kun kyse on luvun arpomisesta väliltä. Juuri siksi selaimet tarjoavat erillisen crypto-rajapinnan sen sijaan, että ne parantaisivat Math.random()-funktiota: nämä kaksi ratkaisevat eri ongelmia, ja vain toinen niistä on turvallinen silloin, kun lopputuloksella on jollekulle merkitystä.
Satunnaisen sarjan ei ole tarkoitus näyttää satunnaiselta ihmisen silmään. Arvo kymmenen lukua väliltä 1–10, ja näet säännöllisesti toiston, lähes-parin kuten 7, 7, 8, tai lyhyen jakson, joka osuu kokonaan korkealle – ja jokainen näistä on aivan tavallista. Aito satunnaisuus on ennustamatonta, ei tasaisesti jakautunutta: jokainen arvonta on riippumaton, aiemmilla luvuilla ei ole minkäänlaista vaikutusta myöhempiin, eikä yksikään luku ole koskaan ”vuorossa”. Vaisto, joka väittää muuta, on pelaajan harha, ja se on sama vaisto, joka tekee ihmisistä huonoja satunnaislukugeneraattoreita – kun meitä pyydetään keksimään satunnainen sarja, vältämme toistoja ja levitämme arvot paljon tasaisemmin kuin sattuma koskaan tekisi. Tulos, joka näyttää epäilyttävän siistiltä, on ihmisen sormenjälki; aito satunnaisuus tuottaa kasaumia.
Miksi valita tämä satunnaislukugeneraattori?
- Generointi vain selaimessa: luvut arvotaan laitteellasi eivätkä lähde minnekään
- Satunnaisuutta Web Crypto API:sta: kryptografisesti turvallista, ei Math.random()-funktiota
- Ei modulo bias -vinoumaa: rejection sampling pitää jokaisen luvun välillä yhtä todennäköisenä
- Mikä tahansa väli: 1:stä 10:een aina miljardien lukujen arvoihin asti, molemmat ääriarvot mukaan lukien
- Tila ”Ilman kaksoiskappaleita”: arvo lista ilman toistoja arpajaisiin ja ryhmiin jakoon
- Useita sarjoja: monta riippumatonta arvontaa yhdellä klikkauksella
- Lajittelu ja tulostusmuodot: nouseva tai laskeva, rivinvaihto, välilyönti tai pilkku
- Historia ja tallennus tiedostoon: pidä kirjaa arvonnasta, jonka saatat joutua perustelemaan
- Rajaton ja ilmainen: ei rekisteröitymistä, ei käyttörajoja, ei mitään tallennettuna palvelimillemme
Satunnaislukuja tarvitaan useammassa paikassa kuin useimmat arvaavat. Opettajat valitsevat oppilaita suosimatta ketään. Striimaajat ja markkinoijat arpovat arpajaisten ja kilpailujen voittajia yleisön edessä, jonka on voitava luottaa tulokseen. Pelaajat korvaavat kadonneen nopan tai ratkaisevat, kuka aloittaa, ja turnauksissa lähtöjärjestys arvotaan. Tutkijat valitsevat satunnaisotoksen, jotta tulokset yleistyvät myös niihin, jotka eivät osallistuneet. Kehittäjät generoivat testidataa, alustavat simulaatioita siemenillä ja valitsevat tunnisteita QA-vaiheessa. Yhteinen piirre on satunnainen valintaprosessi, joka voidaan selittää jälkikäteen: koska arvonta käyttää kryptografista satunnaisuutta ja tapahtuu kokonaan omalla laitteellasi, voit näyttää, miten tulos syntyi, jos joku kyseenalaistaa sen.
Tällä generaattorilla on muutama rehellinen rajoitus, jotka kannattaa tietää. Tila ”Ilman kaksoiskappaleita” ei voi arpoa enempää lukuja kuin välillä on: kaksikymmentä yksilöllistä arvoa väliltä 1–10 ei yksinkertaisesti ole olemassa. Arvonnat ovat riippumattomia, eivätkä aiemmat tulokset vaikuta myöhempiin, joten sivun päivittäminen ei nollaa mitään kiertoa – kiertoa, jossa oltaisiin, ei ole olemassakaan. Ja vaikka luvut ovat kryptografisesti vahvoja, arvonta on tässä reilu satunnaisvalinta, ei ennustus: viralliset arvonnat käyttävät omia fyysisiä tai sertifioituja laitteitaan, eikä selaimessasi lasketulla ole mitään yhteyttä niihin. Näiden rajojen sisällä takuu on sitäkin vahvempi: jokaisella luvulla välilläsi on täsmälleen sama mahdollisuus joka ikisellä arvonnalla.