Генератор випадкових чисел

Згенеруйте випадкове число, список або кілька наборів чисел у будь-якому діапазоні – прямо у браузері за допомогою криптографічної випадковості, ніколи на стороні сервера.

Натисніть «Згенерувати», щоб отримати результат
Опції

Потрібен швидкий і чесний спосіб отримати випадкове число? Цей безкоштовний онлайн-генератор випадкових чисел генерує число – або цілий список чисел – у будь-якому діапазоні, який ви оберете: від простого діапазону від 1 до 10 до найширшого від −1 000 000 000 000 до 1 000 000 000 000 — лише цілі числа, включно з нулем та від'ємними. Вкажіть мінімальне та максимальне значення в полях «Мін» і «Макс», оберіть, скільки чисел потрібно, у полі «Кількість», і натисніть «Згенерувати». Обидві межі входять до діапазону: діапазон від 1 до 10 може повернути як 1, так і 10.

Кожен результат генерується прямо у вашому браузері за допомогою Web Crypto API (crypto.getRandomValues) – що надає криптографічно надійні випадкові значення від джерела випадковості, наданого операційною системою. Ваші числа ніколи не надсилаються на наш сервер, тому ми ніколи їх не бачимо й не записуємо. Генерація миттєва, приватна і продовжує працювати навіть на повільному з'єднанні, щойно сторінка завантажилася.

Опції враховують реальні сценарії, у яких потрібні випадкові числа. Увімкніть «Без повторень», щоб жодне число не повторювалося – саме це потрібно для розіграшів, лотерейних тиражів або поділу людей на групи без повторів. Потрібно обрати 20 переможців із 500 учасників? Встановіть «Мін» на 1, а «Макс» на 500, увімкніть «Без повторень», задайте «Кількість» 20 і натисніть «Згенерувати». «Порядок сортування» упорядковує результат за зростанням або спаданням, а одна кнопка копіює весь список. Перемкнувши «Формат результату» з «Новий рядок» на «Через пробіл» або «Через кому», стане доступним поле «Кількість наборів»: кілька незалежних генерацій за раз – наприклад, двадцять наборів по 3 числа для двадцяти раундів розіграшу – а «Дозволити повтори між наборами» визначає, чи може те саме число з'явитися більш ніж в одному наборі.

Як насправді генерується випадковість? Випадковість у браузері походить із криптографічно надійного генератора вашої операційної системи, а не з самого JavaScript. Коли ви натискаєте «Згенерувати», JavaScript сторінки запитує в браузера сирі 32-бітні значення через crypto.getRandomValues і переносить їх у заданий вами діапазон. Тут немає seed (початкового значення), яке можна вгадати, немає алгоритмічного скорочення, яке можна відтворити, а самі числа ніколи не передаються мережею.

Перетворення сирого значення на ваш діапазон – це те місце, де генератори тихо помиляються, і воно заслуговує на окремий абзац. Брати значення за модулем розміру діапазону – очевидний, але й упереджений підхід: якщо діапазон не ділить 2^32 рівно, найменші числа випадають трохи частіше за інші. Ця вада називається modulo bias (упередженість модуля), і вона вимірювана, а не теоретична. Натомість цей генератор відкидає будь-яке значення понад найбільше значення, кратне розміру діапазону і генерує знову – техніка, яка називається rejection sampling (вибіркою з відбраковуванням). Це коштує кількох додаткових спроб, але натомість дає точну гарантію: кожне число між «Мін» і «Макс» має рівно однакову ймовірність, а не приблизно однакову.

Що робить число справді випадковим? Число достатньо випадкове, коли попередні результати нічого не кажуть про наступне – і на практиці тут є три рівні. Звичайна псевдовипадкова функція, як-от Math.random(), виконує детермінований алгоритм: будь-хто, хто знає її внутрішній стан, може відтворити всю послідовність – це годиться для перемішування слайдшоу і не годиться там, де результат не повинен бути передбачуваним. Криптографічно надійний генератор – рівень, який використовує цей інструмент, – теж алгоритм, але він побудований на надійному системному джерелі випадковості й так, що спостереження за його виводом нічого не каже про наступне значення. Фізичні джерела, як-от атмосферний шум чи радіоактивний розпад, є радше іншим видом випадковості, аніж сильнішим: для вибору числа з діапазону криптографічно безпечний генератор на практиці є так само непередбачуваним. Саме тому браузери пропонують окреме crypto API замість того, щоб покращувати Math.random(): вони вирішують різні задачі, і лише один із них безпечний, коли результат для когось справді важливий.

Справді випадкова послідовність не зобов'язана виглядати випадковою для людини. Виберіть десять чисел від 1 до 10 – і ви регулярно побачите повтор, майже пару на кшталт 7, 7, 8, або коротку серію, яка тримається вгорі – і кожен із цих випадків абсолютно нормальний. Випадковість вирівнюється лише на великій кількості генерацій і ніколи — на кількох: якщо повтори дозволені, кожна генерація незалежна, попередні числа жодним чином не впливають на наступні, і жодне число ніколи не «мусить» випасти. Інстинкт, який стверджує протилежне, – це помилка азартного гравця, і саме цей інстинкт робить самих людей поганими генераторами випадкових чисел – коли нас просять вигадати випадкову послідовність, ми уникаємо повторів і розподіляємо значення набагато рівномірніше, ніж це коли-небудь робить випадковість. Результат, який виглядає підозріло охайним, з більшою ймовірністю вигаданий людиною, ніж отриманий випадково; випадкові генерації утворюють скупчення.

Чому варто обрати цей генератор випадкових чисел?

Випадкові числа використовують в Україні у значно більшій кількості ситуацій, ніж здається. Вчителі випадково обирають учнів, не віддаючи переваги нікому. Стримери та маркетингові команди проводять розіграші подарунків і призів перед аудиторією, яка має вірити результату. У настільних іграх випадкове число замінює загублений кубик або визначає, хто ходить першим, а ліги встановлюють порядок драфту. Дослідницькі команди обирають випадкову вибірку, щоб їхні висновки поширювалися не лише на тих, хто зголосився. Команди розробників генерують тестові дані, ініціалізують симуляції та обирають ідентифікатори під час 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() натомість не варто використовувати там, де важлива непередбачуваність: він детермінований і не призначений для криптографічно безпечної генерації.

Чи можна передбачити або вплинути на випадкові числа?

Тут – ні. Значення походять із криптографічно надійного генератора вашої операційної системи, тож спостереження за попередніми результатами нічого не каже про наступне, а генерація відбувається повністю на вашому пристрої – результат ніколи не надсилається на наш сервер, тому під час передачі нема чого перехопити чи змінити, і ми ніколи його не бачимо.

Чи підходить він для добору переможців розіграшів чи лотерей?

Так. Присвойте кожному учаснику номер, згенеруйте результат у цьому діапазоні – і переможе учасник із відповідним номером. Оскільки джерело криптографічно надійне, а генерація відбувається локально, результат не може передбачити чи вплинути на нього ніхто, включно з нами, – цей процес легко пояснити. Для публічного розіграшу опублікуйте правила та пронумерований список учасників до жеребкування, проведіть розіграш один раз і збережіть результат — саме по собі випадкове число не доводить чесність конкурсу. Для лотерейного білета це працює так само, але це чесний випадковий вибір, а не передбачення: офіційні тиражі з ним не пов'язані.

Чи змінює оновлення сторінки випадковість?

Ні, і в цьому немає потреби. Кожна генерація й так запитує в операційної системи свіжі випадкові значення, тож результати незалежні незалежно від того, натиснете ви «Згенерувати» десять разів чи оновите сторінку між кожним натисканням. Немає жодного циклу, який потрібно перезапускати, і немає стану, який застаріває – оновлення лише очищає результати, показані на екрані.

Чи безкоштовний генератор і чи зберігаєте ви мої числа?

Інструмент повністю безкоштовний і не потребує реєстрації. Усі числа генеруються локально у вашому браузері й ніколи не залишають ваш пристрій, тому вони ніколи не потрапляють на наш сервер, і ми ніколи не бачимо й не зберігаємо їх. Аналітика, якщо ви її дозволяєте, фіксує лише факт використання інструмента — і ніколи самі числа.