Генератор случайных чисел
crypto.getRandomValues · равномерно · в браузере
crypto.getRandomValues. Страница использует выборку с отказом, поэтому результат равномерен на любом диапазоне — без смещения по модулю. Настраивается диапазон, количество, разряды, порядок, разделитель вывода и режим только-уникальные.Почему это "истинно случайно"
Браузеры предоставляют два источника случайности: Math.random(), быстрый, но детерминированный в рамках одного запуска псевдослучайный генератор, и crypto.getRandomValues(), криптографически безопасный RNG, посеянный из пула энтропии операционной системы — того же источника, что используется для генерации сессионных ключей TLS. Эта страница использует последний для каждого извлекаемого значения.
Избегание modulo-смещения
Наивные реализации «целое из RNG» делают rand() % n — это даёт чуть больший вес нижнему концу диапазона, когда n не делит размер слова RNG нацело. Смещение мало, но реально и тривиально обнаруживается на миллионах розыгрышей.
Десятичный режим
Когда вы запрашиваете десятичные, страница берёт равномерное значение в [0, 1) из 53 бит crypto.getRandomValues и масштабирует его в запрошенный диапазон. Доступно до 15 разрядов точности — практический предел чисел двойной точности IEEE-754, которыми и являются числа JavaScript.
Уникальный режим
С включённым Без дубликатов страница использует частичное перемешивание Фишера–Йетса целочисленного диапазона, что гарантирует равномерно распределённые уникальные выборки — стандартный подход для честной выборки без возврата (тот же алгоритм используется для перемешивания карт или розыгрыша лотереи без переброса).
Конфиденциальность
Каждое значение генерируется локально. Страница не делает сетевых запросов после первоначальной загрузки статических ресурсов, и нет аналитических скриптов. Ничто из вашего ввода или сгенерированных значений не покидает страницу.