Reikia greito ir sąžiningo būdo gauti atsitiktinį skaičių? Šis nemokamas internetinis atsitiktinių skaičių generatorius ištraukia vieną skaičių – arba visą skaičių sąrašą – bet kokiame jūsų pasirinktame intervale, nuo paprasto intervalo nuo 1 iki 10 iki intervalų, siekiančių milijardus. Nustatykite mažiausią ir didžiausią reikšmę laukuose „Min“ ir „Maks“, pasirinkite, kiek skaičių reikia, lauke „Kiekis“ ir paspauskite „Generuoti“. Abi ribos yra įtrauktos, todėl intervalas nuo 1 iki 10 gali grąžinti ir 1, ir 10.
Kiekvienas rezultatas sukuriamas tiesiogiai jūsų naršyklėje naudojant Web Crypto API (crypto.getRandomValues) – tai suteikia kriptografiškai stiprias atsitiktines reikšmes iš pagrindinio jūsų naršyklės sistemos atsitiktinumo. Niekas nesiunčiama į serverį, jūsų rezultatai nesaugomi mūsų serveriuose ir mes niekada nematome jūsų skaičių. Generavimas vyksta akimirksniu, privačiai ir toliau veikia net lėtame ryšyje, kai puslapis jau užsikrovė.
Parinktys sukurtos toms situacijoms, kai žmonėms tikrai reikia atsitiktinių skaičių. Įjunkite „Be pasikartojimų“, kad joks skaičius nepasikartotų du kartus – tai tiksliai tai, ko reikia loterijoms, burtų traukimams ar žmonių padalijimui į grupes be pasikartojimų. Reikia dvidešimties nugalėtojų iš 500 dalyvių? Nustatykite „Min“ reikšme 1, o „Maks“ – 500, įjunkite „Be pasikartojimų“, nustatykite „Kiekis“ reikšme 20 ir paspauskite „Generuoti“. „Rikiavimo tvarka“ sutvarko rezultatą didėjančia arba mažėjančia tvarka, o vienas mygtukas nukopijuoja visus rezultatus. Kai perjungiate „Išvesties formatą“ iš „Nauja eilutė“ į „Atskirta tarpais“ arba „Atskirta kableliais“, atsiranda „Rinkinių skaičius“: keli nepriklausomi traukimai vienu metu – pavyzdžiui, dvidešimt rinkinių po 3 skaičius dvidešimčiai traukimo raundų – o „Leisti pasikartojimus tarp rinkinių“ nusprendžia, ar tas pats skaičius gali pasirodyti daugiau nei viename iš jų.
Kaip iš tikrųjų sukuriamas atsitiktinumas? Jūsų naršyklė teikia kriptografiškai stiprias atsitiktines reikšmes per Web Crypto API, o ne per JavaScript PRNG, tokį kaip Math.random(). Kai paspaudžiate „Generuoti“, puslapis prašo atsitiktinių reikšmių naudodamas crypto.getRandomValues ir jas panaudoja skaičiams sukurti pasirinktame intervale. Pagrindinis atsitiktinumo šaltinis kyla iš naršyklės ir operacinės sistemos, todėl puslapiui nereikia išlaikyti savo pradinės reikšmės (seed) ar pseudoatsitiktinės sekos.
Neapdorotos reikšmės pavertimas jūsų intervalu yra būtent ta vieta, kur generatoriai tyliai suklysta, ir tai verta atskiros pastraipos. Neapdorotos reikšmės dalijimas iš intervalo dydžio ir dalybos liekanos naudojimas yra akivaizdus būdas – tačiau jis yra šališkas: jei intervalas tiksliai nesidalija iš 2^32, mažiausi skaičiai pasirodo šiek tiek dažniau nei kiti. Ši klaida vadinama modulo bias, ir ji yra išmatuojama, o ne tik teorinė. Šis generatorius vietoj to atmeta bet kokią reikšmę, viršijančią didžiausią tikslų intervalo kartotinį, ir traukia iš naujo – tokia technika vadinama rejection sampling. Tai kainuoja kelis papildomus traukimus, tačiau mainais suteikia tikslią garantiją: kiekvienas skaičius tarp „Min“ ir „Maks“ turi visiškai vienodą tikimybę, o ne tik beveik vienodą.
Kas iš tikrųjų padaro skaičių atsitiktinį? Skaičius yra pakankamai atsitiktinis, kai ankstesni rezultatai nieko nepasako apie kitą – o praktikoje tai turi tris lygius. Įprasta pseudoatsitiktinė funkcija, tokia kaip Math.random(), vykdo determinuotą algoritmą: kiekvienas, žinantis jos vidinę būseną, gali atkurti visą seką, o tai puikiai tinka skaidrių demonstracijai sumaišyti, bet netinka niekam, kur rezultatas negali būti nuspėjamas. Kriptografiškai saugus generatorius (CSPRNG) – lygis, kurį naudoja šis įrankis – taip pat yra algoritmas, tačiau jis sukurtas taip, kad generuotų nenuspėjamas reikšmes iš saugaus sistemos atsitiktinumo šaltinio, ir sukonstruotas taip, kad stebint jo išvestį nieko nepavyktų sužinoti apie tai, kas bus toliau. Fizinis atsitiktinumas, kylantis iš tokių šaltinių kaip atmosferos triukšmas ar radioaktyvusis skilimas, skiriasi nuo abiejų šių lygių, nors praktinis skirtumas išnyksta, kai kalbama apie skaičiaus traukimą iš intervalo. Būtent todėl naršyklės siūlo atskirą kriptografinį API, o ne tiesiog patobulina Math.random(): šie du sprendžia skirtingas problemas, ir saugus yra tik vienas iš jų, kai rezultatas kam nors svarbus.
Atsitiktinė seka žmonėms neprivalo atrodyti atsitiktinė. Ištraukite dešimt skaičių tarp 1 ir 10, ir reguliariai matysite pasikartojimą, beveik porą, tokią kaip 7, 7, 8, arba trumpą seką, kuri visa nukrenta į aukštas reikšmes – ir kiekviena tokia situacija yra visiškai normali. Tikras atsitiktinumas yra nenuspėjamas, o ne tolygiai pasiskirstęs: kiekvienas traukimas yra nepriklausomas, ankstesni skaičiai neturi absoliučiai jokios įtakos vėlesniems, o jokiam skaičiui niekada labiau „neatėjo eilė“ nei kitam. Instinktas, teigiantis priešingai, yra azartinio lošėjo klaida, ir tai tas pats instinktas, kuris paverčia pačius žmones prastais atsitiktinių skaičių generatoriais – kai mūsų prašoma sugalvoti atsitiktinę seką, mes vengiame pasikartojimų ir paskirstome reikšmes daug tolygiau, nei tai kada nors padarytų atsitiktinumas. Rezultatas, kuris atrodo įtartinai tvarkingas, yra žmogaus pirštų atspaudas; tikras atsitiktinumas sukuria sankaupas.
Kodėl verta rinktis šį atsitiktinių skaičių generatorių?
- Generavimas tik naršyklėje: skaičiai sukuriami jūsų įrenginyje ir niekur nesiunčiami
- Atsitiktinumas per Web Crypto API: kriptografiškai saugu, o ne Math.random()
- Nėra modulo bias: rejection sampling užtikrina, kad kiekvienas skaičius intervale būtų vienodai tikėtinas
- Bet koks intervalas: nuo 1 iki 10 iki reikšmių, siekiančių milijardus, įtraukiant abi ribas
- Režimas „Be pasikartojimų“: ištraukite sąrašą be pasikartojimų loterijoms ir grupių sudarymui
- Keli rinkiniai: keli nepriklausomi traukimai vienu paspaudimu
- Rikiavimas ir išvesties formatai: didėjančia ar mažėjančia tvarka, nauja eilutė, tarpai ar kableliai
- Istorija ir išsaugojimas į failą: išsaugokite traukimo įrašą, kurį galbūt reikės pagrįsti
- Neribota ir nemokama: be registracijos, be naudojimo apribojimų, niekas nesaugoma mūsų serveriuose
Atsitiktiniai skaičiai naudojami daug daugiau vietų, nei dauguma žmonių įsivaizduoja. Mokytojai kviečia mokinius atsakinėti niekam neteikdami pirmenybės. Srautų transliuotojai ir rinkodaros specialistai traukia dovanų akcijų ir loterijų nugalėtojus prieš auditoriją, kuri turi tikėti rezultatu. Žaidėjai pakeičia pamestą kauliuką ar nusprendžia, kas pradeda, o turnyruose burtais nustatoma starto tvarka. Tyrėjai atrenka atsitiktinę imtį, kad jų išvados galėtų būti apibendrintos ir tiems, kurie tyrime nedalyvavo. Kūrėjai generuoja testinius duomenis, inicijuoja simuliacijas pradine reikšme (seed) ir renkasi identifikatorius QA metu. Bendras bruožas – atsitiktinis atrankos procesas, kurį galima paaiškinti vėliau: kadangi traukimas naudoja kriptografinį atsitiktinumą ir vyksta visiškai jūsų įrenginyje, galite parodyti, kaip rezultatas atsirado, jei kas nors juo suabejotų.
Šis generatorius turi keletą sąžiningų apribojimų, kuriuos verta žinoti. Režimas „Be pasikartojimų“ negali ištraukti daugiau skaičių, nei talpina intervalas: dvidešimt unikalių reikšmių tarp 1 ir 10 tiesiog neegzistuoja. Traukimai yra nepriklausomi, o ankstesni rezultatai neturi įtakos vėlesniems, todėl puslapio atnaujinimas neanuliuoja jokio ciklo – tokio ciklo čia tiesiog nėra. Ir nors skaičiai yra kriptografiškai stiprūs, traukimas čia yra sąžiningas pasirinkimas, o ne pranašystė: oficialūs loterijų traukimai naudoja savo pačių fizinę arba sertifikuotą įrangą, o tai, kas apskaičiuojama jūsų naršyklėje, su jais neturi jokio ryšio. Šių apribojimų ribose garantija tampa dar stipresnė: kiekvienas skaičius jūsų intervale turi visiškai vienodą tikimybę kiekviename traukime.