შემთხვევითი რიცხვების გენერატორი

შექმენით შემთხვევითი რიცხვი, სია ან რიცხვების რამდენიმე ნაკრები ნებისმიერ დიაპაზონში — ყველაფერი იქმნება პირდაპირ თქვენს ბრაუზერში კრიპტოგრაფიულად უსაფრთხო შემთხვევითობით, არასოდეს სერვერზე.

დააჭირეთ «გენერაციას» არჩევისთვის
პარამეტრები

გჭირდებათ სწრაფი და სამართლიანი გზა შემთხვევითი რიცხვის მისაღებად? ეს უფასო ონლაინ შემთხვევითი რიცხვების გენერატორი ქმნის ერთ რიცხვს — ან რიცხვების მთლიან სიას — თქვენ მიერ არჩეულ ნებისმიერ დიაპაზონში, მარტივი 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, 8, ან მოკლე მიმდევრობას, რომელიც მხოლოდ მაღალი მნიშვნელობებისგან შედგება — და თითოეული ეს შემთხვევა სავსებით ჩვეულებრივია. ნამდვილი შემთხვევითობა არაპროგნოზირებადია, არა თანაბრად განაწილებული: თითოეული რიცხვი ჩნდება წინაზე დამოუკიდებლად, წინა რიცხვებს არანაირი გავლენა არ აქვთ შემდეგებზე, და არცერთ რიცხვს არასდროს არ აქვს გამოჩენის მეტი ალბათობა, ვიდრე მეორეს. ინსტინქტი, რომელიც საწინააღმდეგოს ამტკიცებს, არის მოთამაშის ცდომილება, და ეს იგივე ინსტინქტია, რომელიც ადამიანებს თავად აქცევს შემთხვევითი რიცხვების ცუდ გენერატორებად — როცა გვთხოვენ, შემთხვევითი მიმდევრობა მოვიფიქროთ, ჩვენ ვერიდებით გამეორებებს და ვანაწილებთ მნიშვნელობებს გაცილებით უფრო თანაბრად, ვიდრე ამას შემთხვევითობა ოდესმე გააკეთებდა. შედეგი, რომელიც საეჭვოდ მოწესრიგებული ჩანს, ადამიანის ხელწერაა; ნამდვილი შემთხვევითობა გროვებს ქმნის.

რატომ აირჩიოთ ეს შემთხვევითი რიცხვების გენერატორი?

შემთხვევითი რიცხვები გამოიყენება გაცილებით მეტ ადგილას, ვიდრე ადამიანთა უმეტესობას მიაჩნია. მასწავლებლები იძახებენ მოსწავლეებს, ვინმეს უპირატესობის მინიჭების გარეშე. სტრიმერები და მარკეტინგული გუნდები ირჩევენ საჩუქრებისა და გათამაშებების გამარჯვებულებს აუდიტორიის წინაშე, რომელსაც სჯერა შედეგისა. მოთამაშეები ცვლიან დაკარგულ კამათელს ან წყვეტენ, ვინ იწყებს პირველი, ხოლო ტურნირებზე გათამაშებით განისაზღვრება საწყისი თანმიმდევრობა. მკვლევრები ირჩევენ შემთხვევით შერჩევას, რათა მათი დასკვნები მართებული იყოს იმ ადამიანებისთვისაც, რომლებიც კვლევაში არ მონაწილეობდნენ. დეველოპერები ქმნიან სატესტო მონაცემებს, აყენებენ საწყის მნიშვნელობას (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 უზრუნველყოფს კრიპტოგრაფიულად ძლიერ შემთხვევით მნიშვნელობებს ოპერაციული სისტემის საბაზისო შემთხვევითობის გამოყენებით, და არა JavaScript PRNG-ის, მაგალითად Math.random()-ის, მეშვეობით. Math.random()-ია სწორედ ის, რასაც არ უნდა ენდოთ ნებისმიერ ნამდვილად მნიშვნელოვან საკითხში: ის დეტერმინისტულია და არასოდეს ყოფილა შექმნილი არაპროგნოზირებადი რომ ყოფილიყო.

შესაძლებელია შემთხვევითი რიცხვების პროგნოზირება ან მათზე გავლენა?

არა, აქ არა. მნიშვნელობები მოდის თქვენი ოპერაციული სისტემის კრიპტოგრაფიულად უსაფრთხო გენერატორიდან, ამიტომ წინა შედეგების დაკვირვება არაფერს ამჟღავნებს შემდეგის შესახებ, ხოლო გათამაშება მთლიანად თქვენს მოწყობილობაზე ხდება — არ არსებობს სერვერი ჩარევისთვის და არ არსებობს მოთხოვნა, რომლის ჩაჭრაც შესაძლებელია. ჩვენც ვერ ვახდენთ გავლენას თქვენს შედეგებზე, რადგან ვერასოდეს ვხედავთ მათ.

შესაფერისია საჩუქრებისა და გათამაშებების გამარჯვებულების ასარჩევად?

დიახ. მიანიჭეთ თითოეულ მონაწილეს რიცხვი, შექმენით შედეგი ამ დიაპაზონში, და იმარჯვებს მონაწილე, რომლის რიცხვიც ემთხვევა. რადგან წყარო კრიპტოგრაფიულად უსაფრთხოა და გათამაშება მთლიანად თქვენს მოწყობილობაზე ხდება, პროცესის ახსნა და დოკუმენტირება ადვილია, თუ მონაწილე ეჭვქვეშ დააყენებს შედეგს. თუ ირჩევთ რიცხვებს ლატარიის ბილეთისთვის, ინსტრუმენტი მუშაობს, როგორც შემთხვევითი არჩევის საშუალება, და არა როგორც პროგნოზი: ლატარიის ოფიციალურ გათამაშებებს მასთან არანაირი კავშირი არ აქვთ.

გვერდის განახლება ცვლის შემთხვევითობას?

არა, და ეს საერთოდ არც კი არის საჭირო. თითოეული გათამაშება უკვე ითხოვს ახალ შემთხვევით მნიშვნელობებს ოპერაციული სისტემისგან, ამიტომ შედეგები დამოუკიდებელია, მიუხედავად იმისა, დააჭერთ თუ არა „გენერაცია“ ღილაკს ათჯერ ზედიზედ, თუ ხელახლა ჩატვირთავთ გვერდს ყოველი დაჭერის შემდეგ. არ არსებობს ციკლი გადასატვირთად და არ არსებობს მდგომარეობა, რომელიც შეიძლება მოძველდეს — განახლება უბრალოდ შლის ეკრანზე ნაჩვენებ შედეგებს.

გენერატორი უფასოა და ინახავთ ჩემს რიცხვებს?

ინსტრუმენტი სრულიად უფასოა და არ საჭიროებს რეგისტრაციას. ყველა რიცხვი იქმნება ლოკალურად თქვენს ბრაუზერში და არასოდეს ტოვებს თქვენს მოწყობილობას, ამიტომ ჩვენ ვერც შევძლებდით თქვენი შედეგების შენახვას ან ნახვას, ჩვენც რომ გვინდოდეს.