Кездейсоқ санды алудың жылдам әрі әділ жолын іздеп жүрсіз бе? Бұл тегін онлайн кездейсоқ сандар генераторы сіз таңдаған кез келген ауқымда бір санды — немесе сандардың толық тізімін — жасайды: қарапайым 1-ден 10-ға дейінгі ауқымнан бастап миллиардтарға дейін жететін ауқымдарға дейін. Ең төменгі және ең жоғарғы мәндерді «Мин» және «Макс» өрістерінде орнатыңыз, қанша сан керек екенін «Саны» өрісінде таңдаңыз, содан кейін «Жасау» түймесін басыңыз. Екі шекара да нәтижеге кіреді, сондықтан 1-ден 10-ға дейінгі ауқым 1-ді де, 10-ды да қайтара алады.
Әр нәтиже тікелей сіздің браузеріңізде Web Crypto API (crypto.getRandomValues) арқылы жасалады — бұл операциялық жүйеңіздің негізгі кездейсоқтығынан алынған криптографиялық тұрғыдан күшті кездейсоқ мәндерді береді. Ештеңе серверге жіберілмейді, ештеңе сақталмайды, және біз сіздің сандарыңызды ешқашан көрмейміз. Жасау үдерісі лезде, құпия түрде өтеді, әрі бет жүктелгеннен кейін баяу байланыста да жұмысын жалғастыра береді.
Баптаулар адамдарға кездейсоқ сандар шынымен қажет болатын нақты жағдайларға арналған. Бірде-бір сан екі рет қайталанбауы үшін «Қайталанбайтын» опциясын қосыңыз — бұл жеребеге, лотерея стиліндегі тартылымдарға немесе адамдарды қайталанбайтын топтарға бөлуге қажетті баптау. 500 қатысушының ішінен жиырма жеңімпаз керек пе? «Мин» дегенді 1-ге, «Макс» дегенді 500-ге орнатыңыз, «Қайталанбайтын» опциясын қосыңыз, «Саны» дегенді 20-ға орнатыңыз және «Жасау» түймесін басыңыз. «Сұрыптау реті» нәтижені өсу немесе кему ретімен реттейді, ал бір түйме барлық нәтижелерді бірден көшіреді. «Шығыс форматын» «Жаңа жолдан» «Бос орынмен бөлінгенге» немесе «Үтірмен бөлінгенге» ауыстырғанда «Жиынтықтар саны» өрісі пайда болады: бір мезгілде бірнеше тәуелсіз тартылым — мысалы, жиырма тартылым үшін әрқайсысында 3 саннан жиырма жиынтық — ал «Жиынтықтар арасында қайталануға рұқсат ету» бір санның олардың бірнешеуінде пайда болу-болмауын анықтайды.
Кездейсоқтық іс жүзінде қалай жасалады? Браузеріңіз криптографиялық тұрғыдан күшті кездейсоқ мәндерді Math.random() сияқты JavaScript PRNG арқылы емес, Web Crypto API арқылы береді. «Жасау» түймесін басқанда, бет crypto.getRandomValues арқылы кездейсоқ мәндерді сұрайды және оларды сіз таңдаған ауқымда сандар жасау үшін пайдаланады. Кездейсоқтықтың негізгі көзін операциялық жүйе қамтамасыз етеді, сондықтан бетке өзінің бастапқы мәнін (seed) немесе псевдокездейсоқ тізбегін сақтаудың қажеті жоқ.
Шикі мәнді ауқымыңызға сәйкестендіру — генераторлар үнсіз қателесетін тұс, әрі бұл бөлек абзацқа лайық. Мәнді ауқым өлшеміне бөлгендегі қалдықты алу — ең оңай, бірақ ауытқушылығы бар тәсіл: 2^32 ауқым өлшеміне дәл бөлінбесе, ең төменгі сандар қалғандарына қарағанда сәл жиірек шығады. Бұл кемшілік modulo bias деп аталады, әрі ол өлшенеді, тек теориялық емес. Бұл генератор оның орнына ауқымның ең үлкен дәл еселігінен асатын кез келген мәннен бас тартады да, қайта жасайды — бұл тәсіл rejection sampling деп аталады. Бұл бірнеше қосымша әрекетке тұрады, бірақ орнына дәл кепілдік береді: «Мин» мен «Макс» арасындағы әрбір санда мүлдем бірдей ықтималдық бар, шамамен бірдей емес.
Санды нағыз кездейсоқ ететін не? Сан алдыңғы нәтижелер келесісі туралы ештеңе айтпайтын болса, жеткілікті дәрежеде кездейсоқ болып саналады — іс жүзінде мұның үш деңгейі бар. Math.random() сияқты қарапайым псевдокездейсоқ функция детерминистік алгоритмді орындайды: оның ішкі күйін білетін кез келген адам бүкіл тізбекті қайта жасай алады, бұл оны презентация слайдтарын араластыруға жарамды етеді, бірақ нәтиже болжамды болмауы керек кез келген нәрсеге жарамсыз етеді. Криптографиялық тұрғыдан қауіпсіз генератор (CSPRNG) — бұл құрал пайдаланатын деңгей — сонымен қатар алгоритм, бірақ ол жүйелік кездейсоқтықтың қауіпсіз көзін пайдаланып болжауға болмайтын мәндер жасау үшін жасалған және оның шығысын бақылау келесіде не боларын мүлдем ашпайтындай етіп құрылған. Атмосфералық шу немесе радиоактивті ыдырау сияқты көздерден алынатын физикалық кездейсоқтық осы екі деңгейден де бөлек тұрады, дегенмен ауқымнан сан жасау мәселесіне келгенде іс жүзіндегі айырмашылық жоғалады. Дәл осы себепті браузерлер Math.random()-ды жай ғана жетілдірудің орнына бөлек криптографиялық API ұсынады: бұл екеуі әртүрлі мәселелерді шешеді, ал нәтиже біреу үшін маңызды болғанда, олардың тек біреуі ғана қауіпсіз.
Кездейсоқ тізбектің адамдарға кездейсоқ болып көрінуі міндетті емес. 1 мен 10 арасында он сан жасаңыз, сонда сіз үнемі қайталануды, 7, 7, 8 сияқты дерлік жұпты немесе тек жоғары мәндерден тұратын қысқа тізбекті байқайтын боласыз — және мұның әрқайсысы мүлдем қалыпты жағдай. Нағыз кездейсоқтық болжауға келмейді, ал қысқа тізбектердің біркелкі көрінуі міндетті емес: әрбір сан алдыңғыларға тәуелсіз шығады, алдыңғы сандардың кейінгілеріне мүлдем ешқандай әсері жоқ, және ешбір санның басқасынан гөрі «кезегі келді» деуге болмайды. Керісінше екенін дәлелдейтін сезім — құмарпаздың жаңылысуы, әрі бұл адамдарды өздерін кездейсоқ сандардың нашар генераторына айналдыратын сол сезім — бізден кездейсоқ тізбек ойлап табу сұралғанда, біз қайталанулардан аулақ жүреміз және мәндерді кездейсоқтық ешқашан жасамайтындай бірқалыпты таратамыз. Күдіктене реттелген болып көрінетін нәтиже — адамның қолтаңбасы; нағыз кездейсоқтық шоғырлар жасайды.
Осы кездейсоқ сандар генераторын неліктен таңдау керек?
- Тек браузерде жасалады: сандар құрылғыңызда жасалады және ешқайда жіберілмейді
- Web Crypto API кездейсоқтығы: криптографиялық тұрғыдан қауіпсіз, Math.random() емес
- modulo bias жоқ: rejection sampling ауқымдағы әрбір сан үшін бірдей ықтималдықты сақтайды
- Кез келген ауқым: 1-ден 10-ға дейін миллиардтарға дейін жететін мәндерге дейін, екі шекара да кіреді
- «Қайталанбайтын» режимі: жеребе мен топтарға бөлу үшін қайталанбайтын тізім жасаңыз
- Бірнеше жиынтық: бір рет басу арқылы бірнеше тәуелсіз тартылым
- Сұрыптау мен шығыс форматтары: өсу немесе кему ретімен, жаңа жол, бос орындар немесе үтірлер
- Тарих пен файлға сақтау: негіздеуге тура келуі мүмкін тартылымның жазбасын сақтаңыз
- Шектеусіз әрі тегін: тіркелусіз, пайдалану шектеуінсіз, серверлерімізде ештеңе сақталмайды
Кездейсоқ сандар көптеген адамдар ойлағаннан әлдеқайда көп жерде қолданылады. Мұғалімдер оқушыларды ешкімге артықшылық бермей шақырады. Стримерлер мен маркетингтік топтар нәтижеге сенуге тиіс аудитория алдында сыйлықтар мен жеребе жеңімпаздарын анықтайды. Ойыншылар жоғалған сүйекті ауыстырады немесе кім бірінші бастайтынын шешеді, ал турнирлерде бастапқы кезек тартылыммен анықталады. Зерттеушілер өз нәтижелерінің зерттеуге қатыспаған адамдарға да қатысты болуы үшін кездейсоқ таңдама таңдайды. Әзірлеушілер тестілік деректер жасайды, симуляциялар үшін бастапқы мәнді (seed) орнатады және QA кезінде идентификаторлар таңдайды. Ортақ желі — кейін түсіндіруге болатын кездейсоқ таңдау процесі: тартылым криптографиялық кездейсоқтықты пайдаланатындықтан және толығымен сіздің құрылғыңызда өтетіндіктен, біреу оған күмән келтірсе, нәтиженің қалай жасалғанын көрсете аласыз.
Бұл генератордың білуге тұрарлық бірнеше орынды шектеулері бар. «Қайталанбайтын» режимі ауқымда бар санынан көп сан жасай алмайды: 1 мен 10 арасында жиырма бірегей мән жай ғана жоқ. Тартылымдар тәуелсіз, әрі алдыңғы нәтижелер кейінгілеріне әсер етпейді, сондықтан бетті жаңарту ешбір циклді қайта бастамайды — себебі сіз болатын цикл жай ғана жоқ. Сандар криптографиялық тұрғыдан күшті болғанымен, мұндағы тартылым — әділ таңдау, болжам емес: лотереяның ресми тартылымдары өздерінің физикалық немесе сертификатталған жабдығын пайдаланады, әрі браузеріңізде есептелген ешнәрсенің олармен ешқандай байланысы жоқ. Осы шектеулер аясында кепілдік мықты болып қалады: ауқымыңыздағы әрбір санда әрбір жеке тартылымда мүлдем бірдей мүмкіндік бар.