Պատահական թվերի գեներատոր

Ստեղծեք պատահական թիվ, ցուցակ կամ թվերի մի քանի հավաքածու ցանկացած միջակայքում — ամեն ինչ ստեղծվում է անմիջապես ձեր զննարկիչում՝ կրիպտոգրաֆիկորեն ապահով պատահականությամբ, երբեք սերվերի վրա։

Սեղմեք «Ստեղծել»՝ ընտրելու համար
Ընտրանքներ

Փնտրու՞մ եք արագ և արդար եղանակ՝ պատահական թիվ ստանալու համար։ Այս անվճար առցանց պատահական թվերի գեներատորը ստեղծում է մեկ թիվ կամ ամբողջական ցուցակ, ձեր ընտրած ցանկացած միջակայքում՝ սկսած պարզ 1-ից 10 միջակայքից մինչև միլիարդների հասնող միջակայքեր։ Սահմանեք նվազագույն և առավելագույն արժեքները «Նվազագույն» և «Առավելագույն» դաշտերում, ընտրեք, թե քանի թիվ է ձեզ անհրաժեշտ «Քանակ» դաշտում, և սեղմեք «Ստեղծել»։ Երկու սահմաններն էլ ներառված են արդյունքում, այնպես որ 1-ից 10 միջակայքը կարող է վերադարձնել և՛ 1, և՛ 10։

Յուրաքանչյուր արդյունք ստեղծվում է անմիջապես ձեր զննարկիչում՝ Web Crypto API-ի (crypto.getRandomValues) միջոցով, որը ապահովում է կրիպտոգրաֆիկորեն հզոր պատահական արժեքներ ձեր օպերացիոն համակարգի պատահականությունից։ Ոչինչ չի ուղարկվում սերվերին, ոչինչ չի գրանցվում, և մենք երբեք չենք տեսնում ձեր թվերը։ Ստեղծումն ակնթարթային է, գաղտնի, և շարունակում է աշխատել նույնիսկ դանդաղ կապով՝ էջը բեռնվելուց հետո։

Ընտրանքները նախատեսված են այն իրական իրավիճակների համար, երբ մարդկանց իսկապես անհրաժեշտ են պատահական թվեր։ Միացրեք «Առանց կրկնության»՝ որպեսզի ոչ մի թիվ երկու անգամ չհայտնվի — կարգավորում, որն անհրաժեշտ է վիճակահանությունների կամ մարդկանց առանց կրկնության խմբերի բաժանելու համար։ Ձեզ անհրաժեշտ է 500 մասնակիցներից ընտրել 20 հաղթող։ Սահմանեք «Նվազագույնը»՝ 1, և «Առավելագույնը»՝ 500, միացրեք «Առանց կրկնության», սահմանեք «Քանակը»՝ 20, և սեղմեք «Ստեղծել»։ «Դասավորության կարգը» կարգավորում է արդյունքն աճման կամ նվազման կարգով, և մեկ կոճակով կարելի է պատճենել բոլոր արդյունքները միանգամից։ «Ելքի ձևաչափը» «Նոր տողից» «Բացատով բաժանվածի» կամ «Ստորակետով բաժանվածի» փոխելիս հայտնվում է «Հավաքածուների քանակը» դաշտը՝ մի քանի անկախ վիճակահանություններ միանգամից, օրինակ՝ քսան հավաքածու՝ 3-ական թվով, քսան վիճակահանության համար — իսկ «Թույլատրել կրկնությունները հավաքածուների միջև» որոշում է, թե արդյոք նույն թիվը կարող է հայտնվել դրանցից մեկից ավելիում։

Ինչպե՞ս է իրականում ստեղծվում պատահականությունը։ Ձեր զննարկիչն ապահովում է կրիպտոգրաֆիկորեն հզոր պատահական արժեքներ Web Crypto API-ի միջոցով, այլ ոչ թե JavaScript PRNG-ի, օրինակ՝ Math.random()-ի, միջոցով։ «Ստեղծել» սեղմելիս էջը crypto.getRandomValues-ի միջոցով պահանջում է պատահական արժեքներ և օգտագործում է դրանք՝ ձեր ընտրած միջակայքում թվեր ստեղծելու համար։ Պատահականության հիմքում ընկած աղբյուրը տրամադրվում է օպերացիոն համակարգի կողմից, ուստի էջին անհրաժեշտ չէ պահպանել իր սեփական սկզբնական արժեքը (seed) կամ կեղծ-պատահական հաջորդականությունը։

Հում արժեքը ձեր միջակայքին համապատասխանեցնելը հենց այն կետն է, որտեղ գեներատորները լուռ սխալվում են, և այն արժանի է առանձին պարբերության։ Արժեքը միջակայքի չափի վրա բաժանելուց ստացված մնացորդը վերցնելը ակնհայտ մոտեցում է և միևնույն ժամանակ կողմնակալ. եթե 2^32-ը ճշգրիտ չի բաժանվում միջակայքի չափի վրա, ամենափոքր թվերն ավելի հաճախ են հայտնվում, քան մյուսները։ Այս թերությունը կոչվում է modulo bias, և այն չափելի է, ոչ միայն տեսական։ Այս գեներատորն այդ դեպքում մերժում է միջակայքի ամենամեծ ճշգրիտ բազմապատիկին հասնող կամ այն գերազանցող ցանկացած արժեք և կրկին ստեղծում է թիվ — տեխնիկա, որը կոչվում է rejection sampling։ Սա պահանջում է մի քանի լրացուցիչ փորձ, սակայն դրա դիմաց տալիս է ճշգրիտ երաշխիք. «Նվազագույնի» և «Առավելագույնի» միջև յուրաքանչյուր թիվ ունի լիովին նույն հավանականությունը, ոչ թե մոտավորապես նույնը։

Ի՞նչն է իրականում դարձնում թիվն իսկապես պատահական։ Թիվը բավականաչափ պատահական է, երբ նախորդ արդյունքները ոչինչ չեն ասում հաջորդի մասին — և գործնականում կան այս երևույթի երեք մակարդակ։ Սովորական կեղծ-պատահական ֆունկցիան, օրինակ՝ Math.random()-ը, կատարում է դետերմինիստական ալգորիթմ. ցանկացած ոք, ով իմանում է դրա ներքին վիճակը, կարող է վերարտադրել ամբողջ հաջորդականությունը, ինչը այն դարձնում է հարմար ներկայացման սլայդները խառնելու համար, բայց ոչ պիտանի որևէ բանի համար, որտեղ արդյունքը չպետք է կանխատեսելի լինի։ Կրիպտոգրաֆիկորեն ապահով գեներատորը (CSPRNG) — մակարդակը, որն օգտագործում է այս գործիքը — նույնպես ալգորիթմ է, սակայն նախագծված է համակարգային պատահականության ապահով աղբյուր օգտագործելով անկանխատեսելի արժեքներ ստեղծելու համար և կառուցված է այնպես, որ դրա ելքի դիտարկումը ոչինչ չի բացահայտում հաջորդի մասին։ Ֆիզիկական պատահականությունը, օրինակ՝ մթնոլորտային աղմուկից կամ ռադիոակտիվ քայքայումից, գտնվում է երկու մակարդակներից էլ վեր, թեև գործնական տարբերությունը վերանում է, երբ խոսքը վերաբերում է միջակայքից թիվ ստեղծելուն։ Հենց այս պատճառով է, որ զննարկիչներն առաջարկում են առանձին կրիպտոգրաֆիկ API՝ պարզապես Math.random()-ը բարելավելու փոխարեն. այս երկուսը լուծում են տարբեր խնդիրներ, և միայն մեկն է ապահով, երբ արդյունքը կարևոր է որևէ մեկի համար։

Պատահական հաջորդականությունը մարդկանց համար պարտադիր չէ պատահական տեսք ունենալ։ Ստեղծեք տասը թիվ 1-ից 10 միջակայքում, և կանոնավոր կերպով կնկատեք կրկնություն, գրեթե զույգ, օրինակ՝ 7, 7, 8, կամ կարճ շարք, որն ամբողջությամբ բարձր է ընկնում — և այս դեպքերից յուրաքանչյուրը լիովին սովորական է։ Իսկական պատահականությունը անկանխատեսելի է, ոչ թե հավասարաչափ բաշխված. յուրաքանչյուր թիվ հայտնվում է նախորդներից անկախ, նախորդ թվերն ընդհանրապես ոչ մի ազդեցություն չունեն հաջորդների վրա, և ոչ մի թիվ երբեք ավելի մեծ հավանականություն չունի հայտնվելու, քան մյուսը։ Ինստինկտը, որը պնդում է հակառակը, մոլեխաղացողի մոլորությունն է, և դա նույն ինստինկտն է, որը մարդկանց իրենց իսկ դարձնում է վատ պատահական թվերի գեներատորներ — երբ մեզանից խնդրում են հորինել պատահական հաջորդականություն, մենք խուսափում ենք կրկնություններից և բաշխում ենք արժեքները շատ ավելի հավասարաչափ, քան դա երբևէ կանի պատահականությունը։ Արդյունքը, որը կասկածելիորեն կոկիկ տեսք ունի, մարդու ձեռագիրն է. իսկական պատահականությունը ստեղծում է կուտակումներ։

Ինչու՞ ընտրել այս պատահական թվերի գեներատորը

Պատահական թվերն օգտագործվում են շատ ավելի շատ տեղերում, քան մարդկանց մեծ մասը կպատկերացներ։ Ուսուցիչները կանչում են աշակերտներին՝ առանց որևէ մեկին նախապատվություն տալու։ Ստրիմերները և մարքեթինգային թիմերն ընտրում են նվերների և վիճակահանությունների հաղթողներին այն լսարանի առջև, որը պետք է հավատա արդյունքին։ Խաղացողները փոխարինում են կորած զառը կամ որոշում, թե ով է սկսում առաջինը, իսկ մրցաշարերում վիճակահանությամբ որոշվում է մեկնարկային հերթականությունը։ Հետազոտողներն ընտրում են պատահական նմուշ, որպեսզի իրենց արդյունքները վավեր լինեն նաև հետազոտությանը չմասնակցած մարդկանց համար։ Ծրագրավորողները ստեղծում են թեստային տվյալներ, սահմանում են սկզբնական արժեք (seed) սիմուլյացիաների համար և ընտրում են նույնացուցիչներ QA-ի ընթացքում։ Ընդհանուր հատկանիշը պատահական ընտրության գործընթացն է, որը հետագայում կարելի է բացատրել. քանի որ վիճակահանությունն օգտագործում է կրիպտոգրաֆիկ պատահականություն և ամբողջությամբ տեղի է ունենում ձեր սարքում, դուք կարող եք ցույց տալ, թե ինչպես է ստացվել արդյունքը, եթե որևէ մեկը կասկած հայտնի։

Այս գեներատորն ունի մի քանի ողջամիտ սահմանափակումներ, որոնք արժե իմանալ։ «Առանց կրկնության» ռեժիմը չի կարող ստեղծել ավելի շատ թվեր, քան պարունակում է միջակայքը. քսան եզակի արժեք 1-ից 10 միջակայքում պարզապես գոյություն չունի։ Վիճակահանություններն անկախ են, և նախորդ արդյունքները չեն ազդում հաջորդների վրա, ուստի էջի թարմացումը որևէ ցիկլ չի զրոյացնում — քանի որ ցիկլ, որում կարող եք գտնվել, պարզապես գոյություն չունի։ Եվ թեև թվերը կրիպտոգրաֆիկորեն հզոր են, վիճակահանությունն այստեղ արդար ընտրություն է, ոչ թե կանխատեսում. պաշտոնական վիճակահանություններն օգտագործում են իրենց սեփական ֆիզիկական կամ սերտիֆիկացված սարքավորումները, և ձեր զննարկիչում հաշվարկված որևէ բան կապ չունի դրանց հետ։ Այս սահմանափակումների շրջանակում երաշխիքը հզոր է. ձեր միջակայքի յուրաքանչյուր թիվ ունի ճիշտ նույն հնարավորությունը՝ յուրաքանչյուր առանձին վիճակահանության ժամանակ։

FAQ

Արդյո՞ք պատահականությունը կրիպտոգրաֆիկորեն ապահով է։

Օգտագործվում է ձեր զննարկիչի Web Crypto API-ն (crypto.getRandomValues), որը պատահականությունը ստանում է ձեր օպերացիոն համակարգի կրիպտոգրաֆիկորեն ապահով աղբյուրից։ Ի տարբերություն պարզ կեղծ-պատահական ֆունկցիաների, դրա արդյունքը նախագծված է լինելու անկանխատեսելի գործնականում, և rejection sampling-ը պահպանում է հավասար հավանականություն միջակայքի յուրաքանչյուր թվի համար, փոխանակ նախապատվություն տալու ամենափոքր արժեքներին։

Ինչպե՞ս ստեղծել պատահական թիվ որոշակի միջակայքում։

Մուտքագրեք հնարավոր ամենափոքր արժեքը «Նվազագույն» դաշտում և ամենամեծը՝ «Առավելագույն» դաշտում, այնուհետև սեղմեք «Ստեղծել»։ Երկու սահմաններն էլ ներառված են արդյունքում, այնպես որ 1-ից 10 միջակայքը կարող է տալ և՛ 1, և՛ 10։

Կարո՞ղ եմ մեկ անգամից ստեղծել մի քանի պատահական թիվ։

Այո։ Սահմանեք «Քանակ» դաշտը ձեզ անհրաժեշտ քանակով (մինչև 1000), և գեներատորը մեկ սեղմումով կստեղծի ամբողջ ցուցակը։ Այնուհետև կարող եք պատճենել բոլոր արդյունքները՝ օգտագործելով պատճենման կոճակը, կամ պահպանել դրանք ֆայլում։

Կարո՞ղ եմ մեկ անգամից ստեղծել թվերի մի քանի հավաքածու։

Այո։ Փոխեք «Ելքի ձևաչափը» «Նոր տողից» «Բացատով բաժանվածի» կամ «Ստորակետով բաժանվածի», որպեսզի հայտնվի «Հավաքածուների քանակը» դաշտը։ Սահմանեք այն ձեզ անհրաժեշտ անկախ վիճակահանությունների քանակին, օրինակ՝ քսան հավաքածու՝ 3-ական թվով, քսան վիճակահանության համար, և ընտրեք, թե արդյոք կրկնությունները թույլատրվում են տարբեր հավաքածուների միջև։

Կարո՞ղ եմ դասավորել ստեղծված թվերը։

Այո։ Օգտագործեք «Դասավորության կարգը» տարբերակը՝ յուրաքանչյուր ցուցակն աճման կամ նվազման կարգով դասավորելու համար, կամ թողեք այն «Ոչ մեկը» դիրքում՝ թվերը այն հերթականությամբ պահելու համար, որով ստեղծվել են։

Ինչպե՞ս խուսափել կրկնվող թվերից։

Միացրեք «Առանց կրկնության» անջատիչը։ Երբ այն միացված է, ցուցակի յուրաքանչյուր ստեղծված թիվ տարբեր է — իդեալական է վիճակահանությունների կամ մարդկանց խմբերի բաժանելու համար։ Նկատի ունեցեք, որ քանակը չի կարող գերազանցել միջակայքի չափը. չեք կարող ստեղծել 20 եզակի թիվ 1-ից 10 միջակայքում։

Ինչու՞ են նույն թվերը շարունակ կրկնվում։

Քանի որ անկախ վիճակահանությունները կրկնվում են, և ճիշտ այդպես էլ երևում է պատահականությունը։ Յուրաքանչյուր վիճակահանություն ամբողջությամբ անկախ է նախորդ վիճակահանություններից, ուստի 1-ից 10 միջակայքում նույն թվի շարունակաբար երկու անգամ հայտնվելու հավանականությունը 10-ից 1 է ամեն անգամ — սովորական երևույթ է, ոչ թե խափանում։ Եթե ձեզ անհրաժեշտ է ցուցակ առանց կրկնության, միացրեք «Առանց կրկնության». դա միտումնավոր սահմանափակում է վիճակահանությունը, այլ ոչ թե ուղղում ինչ-որ սխալ։

Ինչու՞ պատահական հաջորդականությունը պատահական տեսք չունի։

Քանի որ իսկական պատահականությունն անկանխատեսելի է, ոչ թե հավասարաչափ բաշխված։ Մարդիկ ակնկալում են, որ պատահական արդյունքը կլինի կոկիկ բաշխված, ուստի կուտակումները, կրկնությունները և կարճ շարքերը, օրինակ՝ 7, 7, 8, թվում են սխալներ, թեև դրանք հենց այն են, ինչ ստեղծում է պատահականությունը։ Հաջորդականությունը, որը մարդուն կոկիկ է թվում, սովորաբար պատահական չի եղել։

Կարո՞ղ եմ վստահել զննարկիչում ստեղծված պատահականությանը։

Այո, երբ այն գալիս է Web Crypto API-ից, ինչպես այստեղ։ crypto.getRandomValues-ը տրամադրում է կրիպտոգրաֆիկորեն հզոր պատահական արժեքներ՝ օգտագործելով օպերացիոն համակարգի պատահականությունը, այլ ոչ թե JavaScript PRNG, օրինակ՝ Math.random()։ Math.random()-ին է, որ չպետք է վստահել որևէ իսկապես կարևոր բանում. այն դետերմինիստական է և երբեք չի նախագծվել լինելու անկանխատեսելի։

Հնարավո՞ր է կանխատեսել կամ ազդել պատահական թվերի վրա։

Ոչ, ոչ այստեղ։ Արժեքները գալիս են ձեր օպերացիոն համակարգի կրիպտոգրաֆիկորեն ապահով գեներատորից, ուստի նախորդ արդյունքների դիտարկումը ոչինչ չի բացահայտում հաջորդի մասին, և վիճակահանությունն ամբողջությամբ տեղի է ունենում ձեր սարքում — չկա սերվեր, որում կարելի է միջամտել, և չկա հարցում, որը կարելի է որսալ։ Մենք ևս չենք կարող ազդել ձեր արդյունքների վրա, քանի որ երբեք չենք տեսնում դրանք։

Արդյո՞ք այն հարմար է նվերների կամ վիճակահանությունների հաղթողներին ընտրելու համար։

Այո։ Յուրաքանչյուր մասնակցի հատկացրեք մի թիվ, ստեղծեք արդյունք այդ միջակայքում, և հաղթում է այն մասնակիցը, ում թիվը համընկնում է։ Քանի որ աղբյուրը կրիպտոգրաֆիկորեն ապահով է, և վիճակահանությունն ամբողջությամբ տեղի է ունենում ձեր սարքում, գործընթացը հեշտ է բացատրել և փաստաթղթավորել, եթե մասնակիցը կասկած հայտնի արդյունքի վերաբերյալ։ Եթե դուք ընտրում եք թվեր վիճակախաղի տոմսի համար, գործիքն աշխատում է որպես պատահական ընտրության միջոց, ոչ թե կանխատեսում. պաշտոնական վիճակահանություններն ընդհանրապես կապ չունեն դրա հետ։

Արդյո՞ք էջի թարմացումը փոխում է պատահականությունը։

Ոչ, և դա անգամ անհրաժեշտ չէ։ Յուրաքանչյուր վիճակահանություն արդեն պահանջում է նոր պատահական արժեքներ օպերացիոն համակարգից, ուստի արդյունքներն անկախ են, անկախ նրանից, թե դուք սեղմում եք «Ստեղծել» տասն անգամ անընդմեջ, թե՞ թարմացնում եք էջը յուրաքանչյուր սեղմումից հետո։ Չկա ցիկլ, որը պետք է վերագործարկել, և չկա վիճակ, որը կարող է հնանալ — թարմացումն ուղղակի մաքրում է էկրանին ցուցադրված արդյունքները։

Արդյո՞ք գեներատորն անվճար է, և արդյո՞ք դուք պահպանում եք իմ թվերը։

Գործիքն ամբողջովին անվճար է և չի պահանջում գրանցում։ Բոլոր թվերը ստեղծվում են տեղում՝ ձեր զննարկիչում, և երբեք չեն լքում ձեր սարքը, ուստի մենք չէինք կարող պահպանել կամ տեսնել ձեր արդյունքները, նույնիսկ եթե ցանկանայինք։