Atsitiktinių skaičių generatorius

Sugeneruokite atsitiktinį skaičių, sąrašą ar kelis skaičių rinkinius bet kokiame intervale – viskas tiesiogiai jūsų naršyklėje, naudojant kriptografiškai saugų atsitiktinumą, niekada serveryje.

Paspauskite Generuoti, kad ištrauktumėte
Parinktys

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ų?

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.

FAQ

Ar atsitiktinumas yra kriptografiškai saugus?

Taip. Naudojama jūsų naršyklės Web Crypto API (crypto.getRandomValues), kuri semia atsitiktinumą iš jūsų operacinės sistemos kriptografiškai saugaus šaltinio. Skirtingai nei paprastos pseudoatsitiktinės funkcijos, jos rezultatas sukurtas taip, kad praktikoje būtų nenuspėjamas, o rejection sampling užtikrina, kad kiekvienas skaičius intervale būtų vienodai tikėtinas, o ne teikia pirmenybę mažiausioms reikšmėms.

Kaip sugeneruoti atsitiktinį skaičių konkrečiame intervale?

Įveskite mažiausią galimą reikšmę lauke „Min“ ir didžiausią lauke „Maks“, tada paspauskite „Generuoti“. Abi ribos yra įtrauktos į rezultatą, todėl intervalas nuo 1 iki 10 gali duoti ir 1, ir 10.

Ar galiu sugeneruoti kelis atsitiktinius skaičius vienu metu?

Taip. Nustatykite lauką „Kiekis“ reikiamu kiekiu (iki 1000), ir generatorius sukurs visą sąrašą vienu paspaudimu. Tuomet galite nukopijuoti visus rezultatus į iškarpinę kopijavimo mygtuku arba juos išsaugoti faile.

Ar galiu sugeneruoti kelis skaičių rinkinius vienu metu?

Taip. Perjunkite „Išvesties formatą“ iš „Nauja eilutė“ į „Atskirta tarpais“ arba „Atskirta kableliais“, kad atsirastų laukas „Rinkinių skaičius“. Nustatykite jį reikiamu nepriklausomų traukimų skaičiumi – pavyzdžiui, dvidešimt rinkinių po 3 skaičius dvidešimčiai traukimo raundų – ir pasirinkite, ar pasikartojimai gali kartotis tarp skirtingų rinkinių.

Ar galiu surikiuoti sugeneruotus skaičius?

Taip. Naudokite parinktį „Rikiavimo tvarka“, kad surikiuotumėte kiekvieną sąrašą didėjančia arba mažėjančia tvarka, arba palikite ją ties „Nėra“, kad skaičiai išliktų tokia tvarka, kokia buvo ištraukti.

Kaip išvengti pasikartojančių skaičių?

Įjunkite jungiklį „Be pasikartojimų“. Kai jis įjungtas, kiekvienas sugeneruotas skaičius sąraše yra skirtingas – tai idealu loterijoms, prizų traukimams ar žmonių padalijimui į grupes. Atkreipkite dėmesį, kad kiekis negali viršyti intervalo dydžio: neįmanoma ištraukti 20 unikalių skaičių tarp 1 ir 10.

Kodėl vis pasikartoja tie patys skaičiai?

Todėl, kad nepriklausomi traukimai gali pasikartoti, ir būtent taip atrodo atsitiktinumas. Kiekvienas traukimas visiškai ignoruoja visus ankstesnius traukimus, todėl intervale nuo 1 iki 10 tikimybė, kad tas pats skaičius pasirodys per du iš eilės vykstančius traukimus, yra viena iš dešimties – tai įprasta, o ne sugedę. Jei jums reikia sąrašo be pasikartojimų, įjunkite „Be pasikartojimų“; tai sąmoningai apriboja traukimą, o ne ištaiso kokią nors klaidą.

Kodėl atsitiktinė seka neatrodo atsitiktinė?

Todėl, kad tikras atsitiktinumas yra nenuspėjamas, o ne tolygiai pasiskirstęs. Žmonės tikisi, kad atsitiktinis rezultatas bus tvarkingai pasiskirstęs, todėl sankaupos, pasikartojimai ir trumpos sekos, tokios kaip 7, 7, 8, atrodo kaip klaidos, nors tai tiksliai tai, ką sukuria atsitiktinumas. Seka, kuri žmogui atrodo tvarkinga, dažniausiai nebuvo atsitiktinė.

Ar galiu pasitikėti naršyklėje sugeneruotu atsitiktinumu?

Taip, kai jis gaunamas iš Web Crypto API, kaip ir čia. crypto.getRandomValues teikia kriptografiškai patikimas atsitiktines reikšmes iš naršyklės sisteminio atsitiktinumo šaltinio, o ne iš JavaScript pseudoatsitiktinių skaičių generatoriaus. Būtent Math.random() nereikėtų pasitikėti, kai kas nors tikrai svarbu: ji yra determinuota ir niekada nebuvo sukurta kaip nenuspėjama.

Ar galima nuspėti ar paveikti atsitiktinius skaičius?

Ne čia. Reikšmės gaunamos iš jūsų operacinės sistemos kriptografiškai saugaus generatoriaus, todėl ankstesni rezultatai nieko neatskleidžia apie kitą, o traukimas vyksta visiškai jūsų įrenginyje – nėra serverio, į kurį būtų galima įsikišti, ir nėra užklausos, kurią kas nors galėtų perimti. Mes taip pat negalime paveikti jūsų rezultatų, nes niekada jų nematome.

Ar tinka renkant dovanų akcijų ar loterijų nugalėtojus?

Taip. Priskirkite kiekvienam dalyviui numerį, sugeneruokite rezultatą tame intervale, ir laimi tas dalyvis, kuriam jis atitinka. Kadangi šaltinis yra kriptografiškai saugus, o traukimas vyksta visiškai jūsų įrenginyje, procesą lengva paaiškinti ir dokumentuoti, jei dalyvis suabejotų rezultatu. Jei renkatės skaičius loterijos bilietui, įrankis veikia kaip atsitiktinio pasirinkimo priemonė, o ne kaip pranašystė: oficialūs traukimai su tuo neturi visiškai jokio ryšio.

Ar puslapio atnaujinimas pakeičia atsitiktinumą?

Ne, ir to net nereikia. Kiekvienas traukimas jau prašo operacinės sistemos naujų atsitiktinių reikšmių, todėl rezultatai yra nepriklausomi nesvarbu, ar paspaudžiate „Generuoti“ dešimt kartų, ar atnaujinate puslapį tarp kiekvieno paspaudimo. Nėra jokio ciklo, kurį reikėtų paleisti iš naujo, ir nėra jokios būsenos, kuri galėtų pasenti – atnaujinimas tik išvalo ekrane rodomus rezultatus.

Ar generatorius nemokamas ir ar jūs saugote mano skaičius?

Įrankis yra visiškai nemokamas ir nereikalauja registracijos. Visi skaičiai generuojami vietoje, jūsų naršyklėje, ir niekada nepalieka jūsų įrenginio, todėl mes negalėtume išsaugoti ar pamatyti jūsų rezultatų, net jei norėtume.