Kas vajad kiiret ja ausat viisi juhusliku arvu saamiseks? See tasuta juhuslike arvude generaator loosib välja ühe arvu – või terve nimekirja arve – suvalises sinu valitud vahemikus, alates 1–10 vahemikust kuni miljardeid hõlmavate vahemikeni. Määra minimaalne ja maksimaalne väärtus väljadel „Min“ ja „Maks“, vali väljal „Arv“, mitu numbrit vajad, ning vajuta „Genereeri“. Mõlemad piirid on kaasatud, seega vahemik 1 kuni 10 võib anda tulemuseks nii 1 kui ka 10.
Iga tulemus luuakse otse sinu brauseris Web Crypto API (crypto.getRandomValues) abil – see pakub krüptograafiliselt tugevaid juhuslikke väärtusi sinu brauseri aluseks olevast süsteemi juhuslikkusest. Midagi ei saadeta serverisse, sinu tulemusi ei salvestata meie serverites ja me ei näe sinu numbreid kunagi. Genereerimine toimub koheselt, privaatselt ning töötab ka aeglase ühenduse korral pärast lehe laadimist.
Valikud on loodud olukordadeks, kus inimesed tõesti vajavad juhuslikke numbreid. Lülita sisse „Kordusteta“, et ükski number ei ilmuks kaks korda – täpselt see, mida vajad loosimiste, õnneloosi tüüpi tõmbamiste või inimeste rühmadeks jagamise puhul ilma kordusteta. Kas vajad kahtkümmet võitjat 500 osaleja seast? Määra „Min“ väärtuseks 1 ja „Maks“ väärtuseks 500, lülita sisse „Kordusteta“, määra „Arv“ väärtuseks 20 ja vajuta „Genereeri“. „Sortimise järjekord“ paneb tulemuse kasvavasse või kahanevasse järjekorda ning üks nupp kopeerib kõik tulemused. Kui vahetad „Väljundvormingu“ valikust „Reavahetus“ valikuks „Tühikuga eraldatud“ või „Komaga eraldatud“, ilmub „Komplektide arv“: mitu sõltumatut loosimist korraga – näiteks kakskümmend komplekti, igaühes 3 arvu, kahekümne loosimisvooru jaoks – kusjuures „Luba duplikaadid komplektide vahel“ määrab, kas sama number võib esineda rohkem kui ühes neist.
Kuidas juhuslikkus tegelikult tekib? Sinu brauser pakub krüptograafiliselt tugevaid juhuslikke väärtusi Web Crypto API kaudu, mitte JavaScripti PRNG kaudu nagu Math.random(). Kui vajutad „Genereeri“, küsib leht juhuslikke väärtusi crypto.getRandomValues abil ja kasutab neid arvude loomiseks valitud vahemikus. Juhuslikkuse aluseks olev allikas pärineb brauserist ja operatsioonisüsteemist, seega ei pea leht säilitama oma algväärtust (seed) ega pseudojuhuslikku jada.
Toore väärtuse teisendamine sinu vahemikku on täpselt koht, kus generaatorid vaikselt eksivad, ning see väärib omaette lõiku. Toorväärtuse jagamine vahemiku suurusega ja jäägi kasutamine on ilmselge meetod – kuid see on kallutatud: kui vahemik ei jagu täpselt arvuga 2^32, esinevad väikseimad numbrid pisut sagedamini kui ülejäänud. Seda viga nimetatakse modulo bias'iks ning see on mõõdetav, mitte ainult teoreetiline. Selle asemel loobub see generaator igast väärtusest, mis ületab vahemiku suurima täpse kordse, ning loosib uuesti – tehnikat nimetatakse rejection sampling'uks. See maksab mõne lisaloosimise, kuid annab vastutasuks täpse garantii: iga number „Min“ ja „Maks“ vahel on täpselt sama tõenäosusega, mitte ainult peaaegu sama.
Mis teeb numbri tõeliselt juhuslikuks? Number on piisavalt juhuslik siis, kui eelmised tulemused ei ütle midagi järgmise kohta – ja praktikas on selle kolm taset. Tavaline pseudojuhuslik funktsioon nagu Math.random() käivitab deterministliku algoritmi: igaüks, kes teab selle sisemist olekut, suudab kogu jada taasesitada, mis sobib hästi slaidiesitluse segamiseks, kuid ei sobi millekski, kus tulemus ei tohi olla ennustatav. Krüptograafiliselt turvaline generaator (CSPRNG) – tase, mida see tööriist kasutab – on samuti algoritm, kuid see on loodud tootma ennustamatuid väärtusi süsteemi turvalisest juhuslikkuse allikast ning üles ehitatud nii, et selle väljundi jälgimine ei paljasta midagi selle kohta, mis tuleb järgmisena. Füüsiline juhuslikkus, näiteks atmosfäärimürast või radioaktiivsest lagunemisest pärinev, erineb neist mõlemast, kuigi praktiline erinevus kaob, kui tegemist on numbri loosimisega vahemikust. Just seetõttu pakuvad brauserid eraldi krüpto-API-t, selle asemel et lihtsalt parandada Math.random()-it: need kaks lahendavad erinevaid probleeme ning turvaline on ainult üks neist, kui tulemus kellelegi korda läheb.
Juhuslik jada ei pea inimestele juhuslik tunduma. Loosi kümme numbrit 1 ja 10 vahel ning näed regulaarselt kordust, peaaegu-paari nagu 7, 7, 8, või lühikest rida, mis kõik langeb kõrgele – ja iga selline olukord on täiesti tavaline. Tõeline juhuslikkus on ennustamatu, mitte ühtlaselt jaotunud: iga loosimine on sõltumatu, varasematel numbritel pole absoluutselt mingit mõju järgnevatele ning mitte ükski number ei oota oma „korda“ rohkem kui teine. Instinkt, mis väidab vastupidist, on hasartmängija eksiarvamus, ning see on sama instinkt, mis teeb inimestest ise kehvad juhuarvude generaatorid – kui meil palutakse välja mõelda juhuslik jada, väldime kordusi ja jagame väärtused palju ühtlasemalt, kui juhus seda kunagi teeks. Tulemus, mis näeb kahtlaselt korrastatud välja, on inimese sõrmejälg; tõeline juhuslikkus tekitab kogumeid.
Miks valida see juhuslike arvude generaator?
- Genereerimine ainult brauseris: numbrid luuakse sinu seadmes ega lähe kunagi kuhugi
- Juhuslikkus läbi Web Crypto API: krüptograafiliselt turvaline, mitte Math.random()
- Modulo bias'i pole: rejection sampling hoiab iga numbri vahemikus võrdselt tõenäolisena
- Suvaline vahemik: alates 1-10-st kuni miljardeid hõlmavate väärtusteni, mõlemad piirid kaasatud
- „Kordusteta“ režiim: loosi nimekiri ilma kordusteta loosimiste ja rühmadeks jagamise jaoks
- Mitu komplekti: mitu sõltumatut loosimist ühe klõpsuga
- Sortimine ja väljundvormingud: kasvav või kahanev, reavahetus, tühikud või komad
- Ajalugu ja salvestamine faili: säilita loosimise andmed, mida ehk pead hiljem põhjendama
- Piiramatu ja tasuta: registreerimiseta, kasutuspiiranguteta, midagi ei salvestata meie serverites
Juhuslikud numbrid on kasutuses palju rohkemates kohtades, kui enamik inimesi arvab. Õpetajad kutsuvad õpilasi vastama ilma kedagi eelistamata. Voogedastajad ja turundajad loosivad välja kingitusi või valivad loosimiste võitjaid publiku ees, kes peab tulemust usaldama. Mängijad asendavad kaotatud täringu või otsustavad, kes alustab, ning turniiridel loositakse alguspositsioonid. Teadlased valivad juhusliku valimi, et nende tulemusi saaks üldistada ka neile, kes uuringus ei osalenud. Arendajad genereerivad testandmeid, käivitavad simulatsioone algväärtusega (seed) ning valivad identifikaatoreid QA käigus. Ühine joon on juhuslik valikuprotsess, mida saab hiljem selgitada: kuna loosimine kasutab krüptograafilist juhuslikkust ja toimub täielikult sinu seadmes, saad näidata, kuidas tulemus tekkis, kui keegi selle kahtluse alla seab.
Sellel generaatoril on mõned ausad piirangud, mida tasub teada. „Kordusteta“ režiim ei suuda loosida rohkem numbreid, kui vahemik sisaldab: kahtkümmet unikaalset väärtust 1 ja 10 vahel lihtsalt ei eksisteeri. Loosimised on sõltumatud ning varasemad tulemused ei mõjuta järgnevaid, seega lehe värskendamine ei lähtesta mingit tsüklit – sellist tsüklit siin ei ole. Ja kuigi numbrid on krüptograafiliselt tugevad, on loosimine siin aus valik, mitte ennustus: ametlikud loteriiloosimised kasutavad oma füüsilist või sertifitseeritud seadet ning sellel, mida sinu brauseris arvutatakse, pole nendega mingit seost. Nende piirangute raames on garantii seda tugevam: igal numbril sinu vahemikus on täpselt sama võimalus, iga loosimise korral.