Unahitaji njia ya haraka na ya haki ya kupata namba ya nasibu? Kizalishi hiki cha bure cha nambari za bahati nasibu mtandaoni hutengeneza namba moja — au orodha nzima ya namba — katika kiwango chochote unachochagua, kutoka kiwango rahisi cha 1 hadi 10 hadi viwango vinavyofikia mabilioni. Weka thamani ya chini na ya juu katika «Kima cha chini» na «Upeo», chagua namba ngapi unahitaji kwa «Idadi», kisha bonyeza «Tengeneza». Mipaka yote miwili inajumuishwa kwenye matokeo, hivyo kiwango cha 1 hadi 10 kinaweza kutoa 1 na 10.
Kila matokeo hutengenezwa moja kwa moja kwenye kivinjari chako kwa kutumia Web Crypto API (crypto.getRandomValues) — ambayo hutoa thamani za nasibu zenye usalama wa kiwango cha kriptografia kutoka kwa chanzo cha nasibu cha mfumo wako wa uendeshaji. Hakuna kinachotumwa kwenye seva, hakuna kinachorekodiwa kwenye seva, na hatuoni namba zako kamwe. Utengenezaji hufanyika papo hapo, kwa faragha, na huendelea kufanya kazi hata kwenye muunganisho wa polepole baada ya ukurasa kupakia.
Chaguo hizi zimeundwa kwa ajili ya hali halisi ambapo watu wanahitaji namba za nasibu. Washa «Ya kipekee» ili kuhakikisha hakuna namba inayoonekana mara mbili — mpangilio unaohitajika kwa michezo ya bahati nasibu, droo za bahati nasibu, au kugawanya watu katika vikundi bila kurudia. Unahitaji washindi 20 kutoka kwa washiriki 500? Weka «Kima cha chini» kuwa 1 na «Upeo» kuwa 500, washa «Ya kipekee», weka «Idadi» kuwa 20, kisha bonyeza «Tengeneza». «Mpangilio wa upangaji» hupanga matokeo kwa kupanda au kushuka, na kitufe kimoja hunakili matokeo yote kwa pamoja. Kubadilisha «Muundo wa matokeo» kutoka «Mstari mpya» hadi «Imetenganishwa kwa nafasi» au «Imetenganishwa kwa koma» kutaonyesha «Idadi ya seti»: tengeneza uchaguzi kadhaa huru kwa wakati mmoja — kwa mfano seti ishirini zenye namba 3 kila moja kwa raundi ishirini za bahati nasibu — na «Ruhusu nakala kati ya seti» huamua kama namba ile ile inaweza kuonekana katika zaidi ya seti moja.
Nasibu hii inatengenezwaje kwa hakika? Kivinjari chako hutoa thamani za nasibu zenye usalama wa kiwango cha kriptografia kupitia Web Crypto API, badala ya PRNG ya JavaScript kama Math.random(). Unapobonyeza «Tengeneza», ukurasa huomba thamani za nasibu kwa kutumia crypto.getRandomValues na kuzitumia kutengeneza namba katika kiwango ulichochagua. Chanzo cha msingi cha nasibu hii kinatolewa na mfumo wa uendeshaji, hivyo ukurasa hauhitaji kuhifadhi namba yake ya kianzio (seed) au mfuatano wa nasibu-bandia.
Kubadilisha thamani ghafi kuwa kiwango chako ndipo vizalishi mara nyingi hukosea kimya kimya, na hili linastahili kuzungumzwa kwa kifungu chake. Kuchukua thamani modulo ya ukubwa wa kiwango kunaonekana kama njia rahisi zaidi, lakini ndiyo pia njia yenye upendeleo: isipokuwa kiwango kigawanyike sawasawa katika 2^32, namba ndogo zaidi hutokea mara nyingi zaidi kidogo kuliko nyingine. Kasoro hii inaitwa modulo bias, na inaweza kupimwa, si nadharia tu. Badala yake, kizalishi hiki hukataa thamani yoyote inayozidi kizidishio kikubwa zaidi kamili cha kiwango na kuchukua thamani mpya tena — mbinu hii inaitwa rejection sampling. Hii inahitaji majaribio machache ya ziada, lakini badala yake hupata uhakika kamili: kila namba kati ya «Kima cha chini» na «Upeo» ina uwezekano sawa kabisa, si karibu sawa tu.
Ni nini kinachofanya namba iwe ya nasibu kweli kweli? Namba ni ya nasibu ya kutosha wakati matokeo ya awali hayasemi lolote kuhusu la ijayo — na kivitendo kuna viwango vitatu vya hilo. Kazi ya kawaida ya nasibu-bandia kama Math.random() huendesha algoriti ya uhakika (deterministic): yeyote anayejua hali yake ya ndani anaweza kuunda upya mfuatano mzima — hii inafaa kwa kuchanganya slaidi za uwasilishaji, lakini haifai kwa jambo lolote ambalo matokeo yake hayapaswi kutabirika. Kizalishi chenye usalama wa kiwango cha kriptografia — kiwango kinachotumiwa na chombo hiki — nacho ni algoriti, lakini kimeundwa kutengeneza thamani zisizotabirika kwa kutumia chanzo salama cha nasibu ya mfumo, na kimejengwa ili kutazama matokeo yake kusifichue lolote kuhusu thamani ijayo. Nasibu ya kimwili, kutoka vyanzo kama kelele za angahewa au uozo wa mionzi, ni kundi tofauti na viwango hivi viwili, ingawa kwa kuchagua namba katika kiwango, tofauti ya kivitendo hupotea. Hii ndiyo sababu vivinjari hutoa crypto API tofauti badala ya kuboresha Math.random(): vyote viwili hutatua matatizo tofauti, na kimoja tu kati ya hivyo ni salama wakati matokeo ni muhimu kwa mtu fulani.
Mfuatano wa nasibu kweli haujaundwa kuonekana wa nasibu machoni pa binadamu. Chukua namba kumi kati ya 1 na 10, nawe utaona mara kwa mara kurudia, jozi za karibu kama 7, 7, 8, au mfuatano mfupi wa namba kubwa mfululizo — na yote hayo ni ya kawaida. Nasibu ya kweli haitabiriki, wala haigawanyiki sawasawa: kila uchaguzi ni huru, namba za awali haziathiri kabisa zile zinazofuata, na hakuna namba inayopata «zamu» yake kamwe. Silika inayosisitiza kinyume chake inaitwa dhana potofu ya mcheza kamari (gambler's fallacy), na silika hiyo hiyo ndiyo hufanya binadamu wawe vizalishi duni vya namba za nasibu — tunapoombwa kuunda mfuatano wa nasibu wenyewe, tunakwepa kurudia na kusambaza thamani kwa usawa zaidi kuliko uwezekano halisi unavyofanya. Matokeo yanayoonekana nadhifu kupita kiasi ni alama ya mkono wa binadamu; nasibu ya kweli badala yake huunda makundi.
Kwa nini uchague kizalishi hiki cha nambari za bahati nasibu?
- Utengenezaji kwenye kivinjari pekee: namba huundwa kwenye kifaa chako na hazitumwi popote
- Nasibu kupitia Web Crypto API: usalama wa kiwango cha kriptografia, si Math.random()
- Hakuna modulo bias: rejection sampling huweka namba zote katika kiwango na uwezekano sawa
- Kiwango chochote: kutoka 1 hadi 10 hadi thamani zinazofikia mabilioni, mipaka yote miwili imejumuishwa
- Hali ya «Ya kipekee»: tengeneza orodha isiyo na kurudia kwa michezo ya bahati nasibu na kugawanya vikundi
- Seti nyingi: uchaguzi kadhaa huru kwa kubofya mara moja
- Upangaji na muundo wa matokeo: kupanda au kushuka, mstari mpya, nafasi, au koma
- Historia na kuhifadhi kwenye faili: weka rekodi ya uchaguzi ambao huenda ukahitaji kuueleza
- Bila kikomo na bure: hakuna usajili, hakuna kikomo cha matumizi, hakuna kinachohifadhiwa kwenye seva zetu
Namba za nasibu hutumika katika sehemu nyingi zaidi kuliko watu wengi wanavyofikiri. Walimu huwaita wanafunzi bila upendeleo. Watangazaji na timu za masoko huchagua washindi wa zawadi na michezo ya bahati nasibu mbele ya watazamaji wanaohitaji kuamini matokeo. Wachezaji hubadilisha kete iliyopotea au kuamua nani acheze kwanza, na mashindano huchagua mpangilio wa kuanza kwa kura. Watafiti huchagua sampuli ya nasibu ili matokeo yao yaweze kutumika kwa upana zaidi ya wale waliojitolea tu. Wasanidi programu hutengeneza data ya majaribio, huweka namba za kianzio kwa ajili ya masimulizi, na huchagua vitambulisho wakati wa QA. Kiungo cha pamoja cha haya yote ni mchakato wa uchaguzi wa nasibu unaoweza kuelezwa baadaye: kwa sababu uchaguzi hutumia nasibu ya kiwango cha kriptografia na hufanyika kabisa kwenye kifaa chako, unaweza kueleza na kuthibitisha jinsi mchakato wa uchaguzi ulivyofanyika iwapo mtu ataleta swali.
Kizalishi hiki kina mipaka michache halisi inayostahili kujulikana. Hali ya «Ya kipekee» haiwezi kutengeneza namba nyingi zaidi kuliko zilizopo kwenye kiwango: thamani 20 za kipekee kati ya 1 na 10 hazipo kabisa. Uchaguzi ni huru na matokeo ya awali hayaathiri yale yanayofuata, hivyo kuonyesha upya ukurasa hakuweki upya mzunguko wowote — kwa sababu hakuna mzunguko hapa kabisa. Na ingawa namba zina usalama wa kiwango cha kriptografia, uchaguzi hapa ni chaguo la haki, si utabiri: bahati nasibu rasmi hutumia vifaa vyake vya kimwili au vilivyoidhinishwa, na chochote kinachokokotolewa kwenye kivinjari chako hakina uhusiano wowote navyo. Ndani ya mipaka hiyo, kila namba katika kiwango chako ina uwezekano sawa kabisa katika kila uchaguzi.