Генератор случайных чисел

Сгенерируйте случайное число, список или несколько наборов чисел в любом диапазоне — прямо в вашем браузере, с криптографически стойкой случайностью, никогда на сервере.

Нажмите «Сгенерировать», чтобы получить результат
Опции

Нужен быстрый и честный способ получить случайное число? Этот бесплатный онлайн-генератор случайных чисел выдаёт одно число — или целый список чисел — в любом выбранном вами диапазоне, от простого диапазона от 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 — интерфейс Web Crypto API для получения криптографически стойких случайных значений, которые могут использоваться, в частности, в криптографических приложениях. При этом источник случайности предоставляется операционной системой, а не JavaScript. Не доверять стоит именно Math.random(), когда что-то действительно важно: эта функция детерминирована и никогда не проектировалась как непредсказуемая.

Можно ли предсказать или повлиять на случайные числа?

Здесь — нет. Значения берутся из криптографически стойкого генератора вашей операционной системы, поэтому предыдущие результаты ничего не раскрывают о следующем, а розыгрыш происходит полностью на вашем устройстве — нет сервера, в который можно было бы вмешаться, и нет запроса, который кто-то мог бы перехватить. Мы тоже не можем повлиять на ваши результаты, потому что никогда их не видим.

Подходит ли это для выбора победителей конкурсов или розыгрышей?

Да. Присвойте каждому участнику номер, сгенерируйте результат в этом диапазоне, и побеждает участник, которому соответствует число. Поскольку источник криптографически стойкий, а розыгрыш происходит полностью на вашем устройстве, процесс легко объяснить и задокументировать, если участник усомнится в результате. Если вы выбираете числа для лотерейного билета, инструмент работает как средство случайного отбора, а не как предсказание: официальные тиражи полностью от этого не зависят.

Меняет ли обновление страницы случайность?

Нет, и в этом нет необходимости. Каждый розыгрыш уже запрашивает у операционной системы свежие случайные значения, поэтому результаты независимы вне зависимости от того, нажимаете ли вы «Сгенерировать» десять раз подряд или обновляете страницу между каждым нажатием. Нет никакого цикла, который нужно было бы перезапускать, и нет состояния, которое могло бы устареть — обновление лишь очищает результаты, показанные на экране.

Бесплатен ли генератор и храните ли вы мои числа?

Инструмент полностью бесплатен и не требует регистрации. Все числа создаются локально в вашем браузере и никогда не покидают ваше устройство, поэтому мы не смогли бы сохранить или увидеть ваши результаты, даже если бы захотели.