Vai jums vajadzīgs ātrs un godīgs veids, kā iegūt nejaušu skaitli? Šis bezmaksas tiešsaistes nejaušu skaitļu ģenerators izlozē vienu skaitli – vai visu skaitļu sarakstu – jebkurā jūsu izvēlētā diapazonā, sākot no vienkārša diapazona no 1 līdz 10 līdz diapazoniem, kas sniedzas miljardos. Iestatiet minimālo un maksimālo vērtību laukos „Min“ un „Maks“, izvēlieties, cik skaitļu jums nepieciešams, laukā „Skaits“, un nospiediet „Ģenerēt“. Abas robežas ir iekļautas, tāpēc diapazons no 1 līdz 10 var atgriezt gan 1, gan 10.
Katrs rezultāts tiek radīts tieši jūsu pārlūkprogrammā, izmantojot Web Crypto API (crypto.getRandomValues) – tas sniedz kriptogrāfiski drošas nejaušas vērtības no jūsu pārlūkprogrammas pamatā esošās sistēmas nejaušības. Nekas netiek nosūtīts uz serveri, jūsu rezultāti netiek saglabāti mūsu serveros, un mēs nekad neredzam jūsu skaitļus. Ģenerēšana notiek acumirklī, privāti, un turpina darboties arī lēnā savienojumā pēc lapas ielādes.
Opcijas ir izveidotas situācijām, kurās cilvēkiem tiešām nepieciešami nejauši skaitļi. Ieslēdziet „Bez atkārtojumiem“, lai neviens skaitlis neparādītos divreiz – tieši tas, kas nepieciešams izlozēm, loterijveida izlozēm vai cilvēku sadalīšanai grupās bez atkārtojumiem. Vai jums nepieciešami divdesmit uzvarētāji no 500 dalībniekiem? Iestatiet „Min“ uz 1 un „Maks“ uz 500, ieslēdziet „Bez atkārtojumiem“, iestatiet „Skaits“ uz 20 un nospiediet „Ģenerēt“. „Kārtošanas secība“ sakārto rezultātu augošā vai dilstošā secībā, un viena poga nokopē visus rezultātus. Kad pārslēdzat „Izvades formātu“ no „Jauna rinda“ uz „Atdalīti ar atstarpēm“ vai „Atdalīti ar komatiem“, parādās „Kopu skaits“: vairākas neatkarīgas izlozes vienlaikus – piemēram, divdesmit kopas pa 3 skaitļiem divdesmit izlozes kārtām – un „Atļaut dublikātus starp kopām“ nosaka, vai tas pats skaitlis var parādīties vairāk nekā vienā no tām.
Kā patiesībā tiek radīta nejaušība? Jūsu pārlūkprogramma sniedz kriptogrāfiski drošas nejaušas vērtības caur Web Crypto API, nevis caur JavaScript PRNG, piemēram, Math.random(). Kad nospiežat „Ģenerēt“, lapa pieprasa nejaušas vērtības, izmantojot crypto.getRandomValues, un izmanto tās, lai izveidotu skaitļus izvēlētajā diapazonā. Nejaušības pamatavots nāk no pārlūkprogrammas un operētājsistēmas, tāpēc lapai nav jāuztur sava sākuma vērtība (seed) vai pseidonejauša secība.
Neapstrādātas vērtības pārveidošana jūsu diapazonā ir tieši tā vieta, kur ģeneratori klusi kļūdās, un tas ir pelnījis atsevišķu rindkopu. Vērtības ņemšana pēc moduļa attiecībā pret diapazona lielumu ir acīmredzams veids – taču tas rada nobīdi: ja diapazona lielums precīzi nedalās ar 2^32, mazākie skaitļi parādās nedaudz biežāk nekā pārējie. Šo kļūdu sauc par modulo bias, un tā ir izmērāma, nevis tikai teorētiska. Šis ģenerators tā vietā atmet jebkuru vērtību, kas pārsniedz lielāko precīzo diapazona daudzkārtni, un izlozē no jauna – šo tehniku sauc par rejection sampling. Tas maksā dažas papildu izlozes, taču pretī sniedz precīzu garantiju: katram skaitlim starp „Min“ un „Maks“ ir tieši vienāda varbūtība, nevis tikai gandrīz vienāda.
Kas patiesībā padara skaitli nejaušu? Skaitlis ir pietiekami nejaušs, ja iepriekšējie rezultāti neko nepasaka par nākamo – un praksē tam ir trīs līmeņi. Parasta pseidonejauša funkcija, piemēram, Math.random(), izpilda determinētu algoritmu: ikviens, kurš zina tās iekšējo stāvokli, var atveidot visu secību, kas ir piemērota kāršu kavas sajaukšanai, taču nederīga nekam, kur rezultāts nedrīkst būt paredzams. Kriptogrāfiski drošs ģenerators (CSPRNG) – līmenis, ko izmanto šis rīks – arī ir algoritms, taču tas ir izstrādāts, lai radītu neparedzamas vērtības no droša sistēmas nejaušības avota, un veidots tā, ka tā izvades novērošana neko neatklāj par to, kas nāks tālāk. Fiziskā nejaušība, kas rodas no tādiem avotiem kā atmosfēras troksnis vai radioaktīvā sabrukšana, atšķiras no abiem šiem līmeņiem, lai gan praktiskā atšķirība izzūd, kad runa ir par skaitļa izlozēšanu no diapazona. Tieši tāpēc pārlūkprogrammas piedāvā atsevišķu kriptogrāfijas API, nevis vienkārši uzlabo Math.random(): šie divi risina dažādas problēmas, un drošs ir tikai viens no tiem, kad rezultāts kādam ir svarīgs.
Nejaušai secībai nav obligāti jāizskatās nejaušai cilvēkiem. Izlozējiet desmit skaitļus no 1 līdz 10, un jūs regulāri redzēsiet atkārtojumus, piemēram, 7, 7, 8, vai īsu virkni, kurā visi skaitļi ir lieli – un katra šāda situācija ir pilnīgi normāla. Patiesa nejaušība ir neparedzama, nevis vienmērīgi sadalīta: katra izloze ir neatkarīga, iepriekšējiem skaitļiem nav absolūti nekādas ietekmes uz nākamajiem, un nevienam skaitlim nekad nav vairāk „pienākusi kārta“ nekā citam. Instinkts, kas apgalvo pretējo, ir spēlmaņa maldi, un tas ir tas pats instinkts, kas padara cilvēkus pašus par sliktiem nejaušo skaitļu ģeneratoriem – kad mums lūdz izdomāt nejaušu secību, mēs izvairāmies no atkārtojumiem un sadalām vērtības daudz vienmērīgāk, nekā to jebkad darītu nejaušība. Rezultāts, kas izskatās aizdomīgi kārtīgs, ir cilvēka pirkstu nospiedums; patiesa nejaušība rada sakopojumus.
Kāpēc izvēlēties šo nejaušu skaitļu ģeneratoru?
- Ģenerēšana tikai pārlūkprogrammā: skaitļi tiek radīti jūsu ierīcē un nekur netiek nosūtīti
- Nejaušība caur Web Crypto API: kriptogrāfiski droši, nevis Math.random()
- Bez modulo bias: rejection sampling nodrošina, ka katrs skaitlis diapazonā ir vienādi ticams
- Jebkurš diapazons: no 1 līdz 10 līdz vērtībām, kas sniedzas miljardos, iekļaujot abas robežas
- Režīms „Bez atkārtojumiem“: izlozējiet sarakstu bez atkārtojumiem izlozēm un grupu veidošanai
- Vairākas kopas: vairākas neatkarīgas izlozes ar vienu klikšķi
- Kārtošana un izvades formāti: augoša vai dilstoša secība, jauna rinda, atstarpes vai komati
- Vēsture un saglabāšana failā: saglabājiet izlozes pierakstu, kas jums varētu būt jāpamato
- Neierobežoti un bez maksas: bez reģistrācijas, bez lietošanas ierobežojumiem, nekas netiek uzglabāts mūsu serveros
Nejauši skaitļi tiek izmantoti daudz vairāk vietās, nekā lielākā daļa cilvēku iedomājas. Skolotāji izsauc skolēnus, nevienu neizceļot. Straumētāji un mārketinga speciālisti izlozē dāvanu akciju un izložu uzvarētājus auditorijas priekšā, kurai jātic rezultātam. Spēlētāji aizstāj pazaudētu kauliņu vai izlemj, kurš sāk, bet turnīros izlozē sākuma secību. Pētnieki izvēlas nejaušu izlasi, lai viņu secinājumus varētu vispārināt arī uz tiem, kas pētījumā nepiedalījās. Izstrādātāji ģenerē testa datus, inicializē simulācijas ar sākuma vērtību (seed) un izvēlas identifikatorus QA laikā. Kopīgais faktors ir nejaušs atlases process, ko var izskaidrot vēlāk: tā kā izloze izmanto kriptogrāfisku nejaušību un notiek pilnībā jūsu ierīcē, jūs varat parādīt, kā rezultāts radās, ja kāds to apšauba.
Šim ģeneratoram ir daži godīgi ierobežojumi, kurus ir vērts zināt. Režīms „Bez atkārtojumiem“ nevar izlozēt vairāk skaitļu, nekā ietver diapazons: divdesmit unikālu vērtību no 1 līdz 10 vienkārši nepastāv. Izlozes ir neatkarīgas, un iepriekšējie rezultāti neietekmē nākamos, tāpēc lapas atsvaidzināšana neatiestata nekādu ciklu – vienkārši nav tāda cikla, kurā varētu atrasties. Un, lai gan skaitļi ir kriptogrāfiski droši, izloze šeit ir godīga izvēle, nevis paredzējums: oficiālās loteriju izlozes izmanto savu fizisko vai sertificēto aprīkojumu, un tam, kas tiek aprēķināts jūsu pārlūkprogrammā, nav nekādas saistības ar tām. Šo ierobežojumu ietvaros garantija ir vēl spēcīgāka: katram skaitlim jūsu diapazonā ir tieši vienādas izredzes katrā izlozē.