Генератар выпадковых лікаў

Згенеруйце выпадковы лік, спіс ці некалькі набораў лікаў у любым дыяпазоне — усё непасрэдна ў вашым браўзеры з выкарыстаннем крыптаграфічна ўстойлівай выпадковасці, ніколі на серверы.

Націсніце «Згенераваць» для выбару
Налады

Патрэбны хуткі і справядлівы спосаб атрымаць выпадковы лік? Гэты бясплатны анлайн-генератар выпадковых лікаў генеруе адзін лік — або цэлы спіс лікаў — у любым дыяпазоне, які вы абярэце, ад простага дыяпазону 1–10 да дыяпазонаў, якія ахопліваюць мільярды. Задайце мінімальнае і максімальнае значэнні ў палях «Мін» і «Макс», абярыце патрэбную колькасць лікаў у полі «Колькасць» і націсніце «Згенераваць». Абедзве мяжы ўваходзяць у дыяпазон, таму дыяпазон ад 1 да 10 можа даць і 1, і 10.

Кожны вынік ствараецца непасрэдна ў вашым браўзеры з дапамогай Web Crypto API (crypto.getRandomValues) — якое атрымлівае крыптаграфічна ўстойлівыя выпадковыя значэнні з крыніцы выпадковасці, прадастаўленай аперацыйнай сістэмай. Нічога не адпраўляецца на сервер, нічога не запісваецца, і мы ніколі не бачым вашыя лікі. Генерацыя адбываецца імгненна, прыватна і працягвае працаваць на павольным злучэнні пасля таго, як старонка загрузілася.

Налады прызначаныя для тых сітуацый, у якіх людзям сапраўды патрэбныя выпадковыя лікі. Уключыце «Без паўтораў», каб ніводны лік не з'яўляўся двойчы — менавіта тое, што трэба для розыгрышаў і падзелу людзей на групы без паўтораў. Патрэбна дваццаць пераможцаў з 500 удзельнікаў? Задайце «Мін» роўным 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, або кароткую серыю, якая ўся трапляе высока — і кожная з гэтых сітуацый абсалютна звычайная. Сапраўдная выпадковасць непрадказальная, а не раўнамерна размеркаваная: кожная генерацыя незалежная, папярэднія лікі не маюць абсалютна ніякага ўплыву на наступныя, і ніводны лік ніколі не «чакае сваёй чаргі» больш за іншы. Інстынкт, які сцвярджае адваротнае, — гэта памылка азартнага гульца, і гэта той жа інстынкт, які робіць людзей дрэннымі генератарамі лікаў саміх па сабе — калі нас просяць прыдумаць выпадковую паслядоўнасць, мы пазбягаем паўтораў і размяркоўваем значэнні значна раўнамерней, чым калі-небудзь робіць выпадковасць. Вынік, які выглядае падазрона акуратна, — гэта адбітак чалавека; сапраўдная выпадковасць стварае скопішчы.

Чаму варта абраць гэты генератар выпадковых лікаў?

Выпадковыя лікі сустракаюцца ў значна большай колькасці месцаў, чым думае большасць людзей. Настаўнікі выклікаюць вучняў, не аддаючы нікому перавагі. Стрымеры і маркетолагі праводзяць розыгрышы падарункаў і прызоў перад аўдыторыяй, якая мусіць давяраць выніку. Гульцы замяняюць страчаны кубік ці вызначаюць, хто пачынае, а на турнірах жэрабя вызначае стартавы парадак. Даследчыкі абіраюць выпадковую выбарку, каб іх высновы можна было пашырыць за межы тых, хто ўдзельнічаў. Распрацоўшчыкі генеруюць тэставыя даныя, задаюць seed для сімуляцый і абіраюць ідэнтыфікатары падчас QA. Агульная рыса — гэта працэс выпадковага адбору, які можна растлумачыць пасля: паколькі генерацыя выкарыстоўвае крыптаграфічную выпадковасць і адбываецца цалкам на вашай прыладзе, вы можаце паказаць, як з'явіўся вынік, калі хтосьці паставіць яго пад сумнеў.

Гэты генератар мае некалькі абмежаванняў, пра якія варта ведаць. Рэжым «Без паўтораў» не можа згенераваць больш лікаў, чым змяшчае дыяпазон: дваццаць унікальных значэнняў паміж 1 і 10 проста не існуе. Генерацыі незалежныя, і папярэднія вынікі не ўплываюць на наступныя, таму перазагрузка старонкі не скідае ніякі цыкл — няма ніякага цыклу, у якім можна было б знаходзіцца. І хоць лікі крыптаграфічна ўстойлівыя, генерацыя тут — гэта справядлівы выбар, а не прадказанне: афіцыйныя тыражы латарэі выкарыстоўваюць уласнае фізічнае або сертыфікаванае абсталяванне, і тое, што вылічаецца ў вашым браўзеры, не мае з імі ніякага дачынення. У межах гэтых абмежаванняў кожны лік у вашым дыяпазоне мае аднолькавую верагоднасць пры кожнай генерацыі.

FAQ

Ці з'яўляецца выпадковасць крыптаграфічна ўстойлівай?

Так. Яна выкарыстоўвае Web Crypto API вашага браўзера (crypto.getRandomValues), якое атрымлівае крыптаграфічна ўстойлівыя выпадковыя значэнні ад крыніцы выпадковасці, прадастаўленай аперацыйнай сістэмай. У адрозненне ад простых псеўдавыпадковых функцый, яе вынік спраектаваны так, каб быць непрадказальным на практыцы, а rejection sampling трымае кожны лік дыяпазону аднолькава верагодным, замест таго каб аддаваць перавагу самым малым значэнням.

Як згенераваць выпадковы лік у пэўным дыяпазоне?

Увядзіце найменшае магчымае значэнне ў поле «Мін», а найбольшае — у поле «Макс», затым націсніце «Згенераваць». Абодва межавыя значэнні ўключаны ў вынік, таму дыяпазон ад 1 да 10 здольны выдаць як 1, так і 10.

Ці магу я згенераваць некалькі выпадковых лікаў адразу?

Так. Задайце ў полі «Колькасць» патрэбную колькасць (да 1000), і генератар створыць увесь спіс адным клікам. Пасля гэтага вы можаце скапіраваць усе вынікі ў буфер абмену кнопкай капіравання або захаваць іх у файл.

Ці магу я згенераваць некалькі набораў лікаў адразу?

Так. Пераключыце «Фармат выніку» з «Новы радок» на «Праз прабел» ці «Праз коску», каб паказаць поле «Колькасць набораў». Задайце патрэбную колькасць незалежных генерацый — напрыклад, дваццаць набораў па 3 лікі для дваццаці раундаў розыгрышу — і абярыце, ці могуць паўторы адбывацца паміж рознымі наборамі.

Ці магу я адсартаваць згенераваныя лікі?

Так. Выкарыстоўвайце опцыю «Парадак сартавання», каб размеркаваць кожны спіс па ўзрастанні ці па змяншэнні, або пакіньце яе на «Няма», каб захаваць лікі ў той паслядоўнасці, у якой яны былі згенераваныя.

Як пазбегнуць паўтораў сярод лікаў?

Уключыце пераключальнік «Без паўтораў». Калі ён уключаны, кожны згенераваны лік у спісе розны — ідэальна для розыгрышаў, конкурсаў ці падзелу людзей на групы. Звярніце ўвагу, што колькасць не можа перавышаць памер дыяпазону: вы не можаце згенераваць 20 унікальных лікаў ад 1 да 10.

Чаму адны і тыя ж лікі паўтараюцца зноў і зноў?

Таму што незалежныя розыгрышы могуць паўтарацца, і менавіта так выглядае выпадковасць. Кожная генерацыя цалкам ігнаруе ўсе папярэднія генерацыі, таму ў дыяпазоне ад 1 да 10 верагоднасць таго, што другі вынік супадзе з першым, складае 1 да 10 — гэта нармальна, а не памылка. Калі вам патрэбны спіс без паўтораў, уключыце «Без паўтораў»; гэта наўмысна абмяжоўвае генерацыю, а не выпраўляе памылку.

Чаму выпадковая паслядоўнасць не выглядае выпадковай?

Таму што сапраўдная выпадковасць непрадказальная, а не раўнамерна размеркаваная. Людзі чакаюць, што выпадковы вынік будзе акуратна размеркаваны, таму скопішчы, паўторы і кароткія серыі накшталт 7, 7, 8 успрымаюцца як памылкі, хоць гэта менавіта тое, што дае выпадковасць. Паслядоўнасць, якая выглядае акуратна для чалавека, звычайна не была выпадковай.

Ці магу я давяраць выпадковасці, згенераванай у браўзеры?

Так, калі яна паходзіць з Web Crypto API, як і тут. crypto.getRandomValues — API Web Crypto, прызначаны для атрымання крыптаграфічна ўстойлівых выпадковых значэнняў, якія могуць выкарыстоўвацца, у тым ліку, у крыптаграфічных аперацыях. Гэтае API атрымлівае сваю энтрапію з аперацыйнай сістэмы, а не з JavaScript. Менавіта Math.random() варта не давяраць, калі гаворка ідзе пра нешта сапраўды важнае: гэтая функцыя дэтэрмінаваная і ніколі не была спраектаваная як непрадказальная.

Ці можна прадказаць або паўплываць на выпадковыя лікі?

Не тут. Значэнні паходзяць з крыптаграфічна ўстойлівага генератара вашай аперацыйнай сістэмы, таму папярэднія вынікі нічога не раскрываюць пра наступны, а генерацыя адбываецца цалкам на вашай прыладзе — няма сервера, які можна ўзламаць, і няма запыту, які хтосьці мог бы перахапіць. Мы таксама не можам паўплываць на вашыя вынікі, бо ніколі іх не бачым.

Ці падыходзіць гэта для вызначэння пераможцаў розыгрышаў?

Так. Прызначце кожнаму ўдзельніку нумар, згенеруйце вынік у гэтым дыяпазоне, і перамагае ўдзельнік з адпаведным нумарам. Паколькі крыніца крыптаграфічна ўстойлівая, а генерацыя адбываецца цалкам на вашай прыладзе, гэты працэс лёгка растлумачыць і задакументаваць, калі ўдзельнік паставіць пад сумнеў вынік. Калі вы абіраеце лікі для латарэйнага білета, інструмент працуе як сродак выпадковага адбору, а не як прадказанне: афіцыйныя тыражы латарэі цалкам не звязаныя з гэтым.

Ці змяняе перазагрузка старонкі выпадковасць?

Не, і гэта нават не патрэбна. Кожная генерацыя ўжо запытвае ў аперацыйнай сістэмы новыя выпадковыя значэнні, таму вынікі незалежныя незалежна ад таго, ці націскаеце вы «Згенераваць» дзесяць разоў, ці перазагружаеце старонку паміж кожным націскам. Няма ніякага цыклу, які трэба перазапускаць, і няма стану, які б устарэў — перазагрузка проста ачышчае вынікі, якія паказваюцца на экране.

Ці бясплатны гэты генератар, і ці захоўваеце вы мае лікі?

Інструмент цалкам бясплатны і не патрабуе рэгістрацыі. Усе лікі ствараюцца лакальна ў вашым браўзеры і ніколі не пакідаюць вашу прыладу, таму мы не можам захаваць ці ўбачыць вашыя вынікі, нават калі б захацелі.