Генератор случайных чисел онлайн
Обновлено: май 2026Сгенерируйте случайные числа в любом диапазоне. Криптографический API обеспечивает высокое качество случайности. Пресеты для лотереи, рулетки и кубика.
Что такое генератор случайных чисел
Генератор случайных чисел (ГСЧ, англ. Random Number Generator, RNG) — это алгоритм или устройство, которое создаёт последовательность чисел, лишённую какой-либо закономерности. Случайные числа применяются повсеместно: в криптографии для генерации ключей шифрования, в статистике для формирования выборок, в игровой индустрии для обеспечения непредсказуемости, в научных вычислениях для метода Монте-Карло, в лотереях и азартных играх для честного определения победителей.
Наш онлайн-генератор случайных чисел позволяет быстро получить одно или несколько случайных чисел в заданном диапазоне. Он работает полностью в вашем браузере, не требует установки программ и не передаёт данные на сервер. Для генерации используется криптографический API crypto.getRandomValues(), обеспечивающий высокое качество случайности, достаточное даже для задач информационной безопасности.
Псевдослучайные и истинно случайные числа: в чём разница
Одно из ключевых понятий в теории случайных чисел — различие между псевдослучайными (PRNG — Pseudo-Random Number Generator) и истинно случайными (TRNG — True Random Number Generator) числами. Понимание этого различия критически важно для выбора подходящего генератора под конкретную задачу.
Псевдослучайные генераторы (PRNG)
Псевдослучайный генератор — это математический алгоритм, который на основе начального значения (seed) вычисляет последовательность чисел. Эта последовательность выглядит случайной, но на самом деле полностью детерминирована: зная алгоритм и начальное состояние, можно точно воспроизвести все числа. Классический пример — линейный конгруэнтный генератор (LCG), который вычисляет следующее число по формуле: X(n+1) = (a × X(n) + c) mod m.
Функция Math.random() в JavaScript реализует псевдослучайный генератор. В большинстве современных браузеров используется алгоритм xorshift128+ — быстрый и статистически качественный PRNG, но не криптографически стойкий. Это означает, что последовательность Math.random() можно восстановить, наблюдая достаточное количество выходных значений — что делает его непригодным для задач безопасности.
Истинно случайные генераторы (TRNG)
Истинно случайные генераторы основаны на физических процессах, которые фундаментально непредсказуемы: тепловой шум в полупроводниках, радиоактивный распад, дробовой шум в электронных компонентах, квантовые колебания вакуума. Такие генераторы не используют алгоритмы — они измеряют реальные физические явления и преобразуют их в числовые значения.
Примеры аппаратных TRNG: генераторы на основе шума лавинного пробоя в стабилитронах, квантовые генераторы случайных чисел (QRNG), которые используют квантово-механические эффекты, модуль Intel RDRAND, встроенный в процессоры начиная с Ivy Bridge. Недостаток аппаратных генераторов — относительно низкая скорость генерации по сравнению с программными PRNG.
Криптографически стойкие генераторы (CSPRNG)
Криптографически стойкие псевдослучайные генераторы (CSPRNG) занимают промежуточное положение. Они используют аппаратные источники энтропии в качестве seed, но затем «растягивают» эту энтропию алгоритмически. Ключевое свойство CSPRNG — даже зная все предыдущие выходные значения, невозможно предсказать следующее (при условии, что начальная энтропия достаточна).
Именно CSPRNG реализует API crypto.getRandomValues(), который использует наш генератор. В операционных системах CSPRNG питается из пула энтропии, который непрерывно пополняется данными от аппаратных источников: таймингов прерываний, движений мыши, нажатий клавиш, сетевого трафика, аппаратных датчиков. В Linux это /dev/urandom, в Windows — BCryptGenRandom, в macOS — SecRandomCopyBytes.
Web Crypto API: как работает crypto.getRandomValues()
Web Crypto API — это стандарт W3C, предоставляющий веб-приложениям доступ к криптографическим операциям прямо в браузере. Метод crypto.getRandomValues() — одна из базовых функций этого API, позволяющая генерировать криптографически стойкие случайные числа.
Технически crypto.getRandomValues() принимает типизированный массив (например, Uint32Array или Uint8Array) и заполняет его случайными значениями. Максимальный размер массива — 65 536 байт (2^16). Метод является синхронным и не требует промисов или callback-функций.
Источник энтропии зависит от платформы: браузер делегирует запрос операционной системе, которая использует свой пул энтропии. Это гарантирует, что качество случайных чисел определяется возможностями ОС и аппаратного обеспечения, а не JavaScript-движком браузера. Метод поддерживается всеми современными браузерами, включая Chrome, Firefox, Safari, Edge и их мобильные версии.
Важное отличие от Math.random(): последний возвращает число с плавающей запятой от 0 до 1, и его внутреннее состояние может быть восстановлено. crypto.getRandomValues() возвращает целые числа в полном диапазоне типизированного массива и является криптографически непредсказуемым.
Области применения случайных чисел
Случайные числа — один из фундаментальных инструментов в информатике, математике, естественных науках и повседневной жизни. Рассмотрим основные области их применения.
Криптография и информационная безопасность
Криптография — наиболее требовательная к качеству случайности область. Генерация ключей шифрования (AES, RSA, ECC), создание инициализирующих векторов (IV), формирование одноразовых кодов (nonce), генерация токенов аутентификации и сессий — всё это требует криптографически стойкой случайности. Слабый генератор может полностью скомпрометировать криптосистему, даже если сам алгоритм шифрования безупречен. Печально известный пример — уязвимость в генераторе случайных чисел Debian OpenSSL (CVE-2008-0166), когда ошибка в коде сократила пространство ключей до 32 768 вариантов.
Статистика и научные вычисления
Метод Монте-Карло — класс вычислительных алгоритмов, основанных на случайной выборке. Он применяется для вычисления многомерных интегралов, моделирования физических процессов (от движения частиц до финансовых рынков), оценки рисков, оптимизации и машинного обучения. Качество результатов напрямую зависит от качества используемого генератора случайных чисел. Для Монте-Карло обычно достаточно хорошего PRNG (Mersenne Twister, PCG), но с равномерным распределением и большим периодом.
Лотереи и азартные игры
Онлайн-казино и государственные лотереи используют сертифицированные генераторы случайных чисел, прошедшие аудит независимых лабораторий (eCOGRA, iTech Labs, GLI). Требования к таким генераторам: равномерность распределения, отсутствие корреляций между последовательными числами, устойчивость к предсказанию, возможность воспроизведения результатов для аудита. Наш генератор использует ту же технологию (CSPRNG), что и профессиональные решения для азартных игр.
Рандомизация в клинических исследованиях
В медицинских исследованиях рандомизация — распределение пациентов по группам с помощью случайных чисел — является золотым стандартом доказательной медицины. Она устраняет систематическую ошибку отбора и обеспечивает сопоставимость групп по известным и неизвестным факторам. Для клинических исследований используются валидированные генераторы со стратификацией и блочной рандомизацией.
Геймдизайн и процедурная генерация
В видеоиграх случайные числа определяют выпадение предметов (лут), генерацию уровней (процедурная генерация в Minecraft, Terraria, No Man's Sky), поведение искусственного интеллекта, критические удары и промахи. Здесь важен баланс между «честной» случайностью и «воспринимаемой справедливостью» — многие игры используют модифицированные генераторы, которые предотвращают длинные серии неудач (pseudo-random distribution, Fibonacci hashing).
Распределение случайных чисел
Наш генератор создаёт числа с равномерным дискретным распределением — каждое целое число в заданном диапазоне имеет одинаковую вероятность выпадения. Если диапазон от 1 до 6, то вероятность каждого числа составляет ровно 1/6 ≈ 16,67%.
Равномерное распределение — базовое, из которого можно получить любое другое: нормальное (гауссово), экспоненциальное, распределение Пуассона и т. д. Для этого применяются методы обратного преобразования, метод Бокса — Мюллера (для нормального распределения) и алгоритм Зиккурата. Наш генератор фокусируется на равномерном распределении как наиболее универсальном и востребованном.
При генерации больших массивов можно заметить, что некоторые числа повторяются чаще других — это нормальное статистическое явление, известное как «парадокс дней рождения». При генерации N чисел из диапазона [1; M] вероятность хотя бы одного совпадения приближается к 50% уже при N ≈ √(πM/2). Например, из 100 чисел в диапазоне 1–10 000 совпадения практически гарантированы.
Тестирование качества случайных чисел
Как определить, является ли последовательность «достаточно случайной»? Для этого существуют специализированные статистические тесты. Наиболее авторитетные наборы тестов:
- NIST SP 800-22 — набор из 15 статистических тестов, разработанный Национальным институтом стандартов и технологий США. Включает тест частоты, тест серий, тест рангов матриц, спектральный тест и другие. Является стандартом де-факто для сертификации генераторов.
- TestU01 (SmallCrush, Crush, BigCrush) — библиотека тестов Пьера Л'Экюйе. BigCrush содержит 160 тестов и является одним из самых строгих наборов.
Math.random()в большинстве реализаций проходит SmallCrush, но может не пройти BigCrush. - Diehard / Dieharder — классический набор тестов Джорджа Марсальи, расширенный до 75+ тестов в версии Dieharder. Проверяет корреляции, периодичность, распределение в многомерных пространствах.
- PractRand — современный набор тестов, способный анализировать терабайты данных. Особенно эффективен для обнаружения слабостей в PRNG с коротким периодом.
Криптографические генераторы, включая crypto.getRandomValues(), проходят все перечисленные тесты. Однако важно понимать: ни один набор тестов не может доказать «истинную случайность» — он может лишь обнаружить статистические аномалии, указывающие на предсказуемость.
Практические рекомендации по использованию генератора
Для максимальной эффективности генератора случайных чисел следуйте этим рекомендациям:
- Выбирайте правильный диапазон. Для лотереи «6 из 45» установите минимум 1, максимум 45, количество 6 и отключите повторения. Используйте готовый пресет, чтобы не ошибиться.
- Учитывайте повторения. Если вам нужны уникальные числа (лотерея, распределение по группам), обязательно снимите флажок «Допускать повторения». Если моделируете бросок кубика или рулетку — оставьте повторения включёнными.
- Не ищите закономерностей. Человеческий мозг склонен находить паттерны в случайных данных — это когнитивное искажение называется апофения. Если генератор выдал три одинаковых числа подряд — это не ошибка, а нормальное свойство случайности.
- Используйте пресеты. Для типовых задач (лотерея, рулетка, монетка, кубик) мы подготовили готовые пресеты с правильными параметрами. Нажмите на кнопку пресета, затем «Сгенерировать».
- Копируйте результаты. Кнопка копирования позволяет быстро перенести числа в буфер обмена. Числа копируются через запятую, что удобно для вставки в таблицы или текстовые документы.
История генераторов случайных чисел
Потребность в случайных числах существовала задолго до появления компьютеров. Древние цивилизации использовали кости (астрагалы), жребий и другие физические устройства. В 1927 году Леонард Типпет опубликовал первую таблицу случайных чисел, полученных из данных переписи населения. В 1947 году корпорация RAND выпустила книгу «Миллион случайных цифр со 100 000 нормальных отклонений» — результат работы электронного генератора шума.
Первый программный PRNG был разработан Джоном фон Нейманом в 1946 году — «метод середины квадрата». Алгоритм был прост: берём число, возводим в квадрат, берём средние цифры результата как следующее число. Метод оказался ненадёжным — последовательности быстро вырождались в циклы. Современные PRNG (Mersenne Twister, xorshift, PCG) лишены этих недостатков и обеспечивают периоды в 2^128 и более.
Переход к аппаратным генераторам начался в 1999 году с инструкции Intel RDRAND, встроенной в процессоры. Сегодня квантовые генераторы случайных чисел (QRNG) — наиболее перспективное направление: они используют фундаментальную непредсказуемость квантовой механики и уже доступны в виде коммерческих USB-устройств и облачных API.
Источники
- NIST SP 800-90A «Recommendation for Random Number Generation Using Deterministic Random Bit Generators» — стандарт генерации случайных чисел
- W3C Web Cryptography API — спецификация криптографического API браузеров
- RFC 4086 «Randomness Requirements for Security» — требования к случайности для задач безопасности
- Knuth D.E. «The Art of Computer Programming, Vol. 2: Seminumerical Algorithms» — фундаментальный труд по алгоритмам генерации случайных чисел