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

Сгенерируйте одно или несколько случайных чисел в заданном диапазоне.

Результат
—

Как работает генератор случайных чисел

Задайте диапазон — минимум и максимум, укажите, сколько чисел нужно, и нажмите кнопку генерации. Вы получите набор случайных целых чисел, причём обе границы диапазона входят в выборку. Опция «без повторов» гарантирует, что каждое число встретится только один раз. Всё считается локально, в браузере.

Случайность берётся из crypto.getRandomValues — криптографически стойкого генератора, встроенного в браузер. Это не привычный Math.random: тот выдаёт псевдослучайную последовательность, которую теоретически можно предсказать, а crypto опирается на источник энтропии операционной системы. Для розыгрышей, жеребьёвок и игр это важно: исход нельзя угадать заранее даже в принципе.

Чтобы каждое значение диапазона выпадало с одинаковой вероятностью, генератор отбрасывает «лишние» случайные величины — приём называется выборкой с отклонением. Без него одни числа получали бы чуть больше шансов, чем другие, и на больших сериях это было бы заметно. Диапазон может включать отрицательные значения: минимум −50 и максимум 50 работают так же, как 1 и 100.

Количество чисел за один раз тоже гибкое: от одного числа до размера всего диапазона в режиме без повторов. Результат выводится списком, и каждое число копируется кликом — удобно переносить в таблицу или сообщение организатору розыгрыша.

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

Пример: вы проводите розыгрыш призов среди 247 участников, каждому присвоен номер. Ставим диапазон 1–247, количество — 3, включаем «без повторов» и получаем, скажем, 42, 156 и 209 — три разных победителя одной кнопкой. Для жеребьёвки групп на турнире берём столько чисел, сколько участников, и получаем готовый случайный порядок выступлений.

С повторами или без

Режим «с повторами» подходит, когда каждый результат независим: бросок кубика, случайная оценка в игре, тестовые данные. Для имитации десяти бросков кубика, например, ставьте диапазон 1–6 и количество 10 с включёнными повторами. «Без повторов» — когда числа означают разные места или людей: номера призов, очерёдность выступлений, состав групп. Учтите ограничение: количество чисел без повторов не может превышать размер диапазона — из диапазона 1–10 нельзя вытянуть 11 разных чисел, и генератор честно об этом предупредит.

Как устроена выдача без повторов

Генератор собирает все числа диапазона в один массив и перемешивает его тасованием Фишера–Йетса — алгоритмом, где каждый порядок элементов равновероятен. Затем берёт нужное количество значений с начала перемешанного массива. Это честнее, чем вытягивать числа по одному и отбрасывать совпадения, и быстрее на больших диапазонах. Тасование тоже использует crypto.getRandomValues, поэтому порядок такой же непредсказуем, как и сами числа.

Для чего ещё пригодится

  • выбрать победителя конкурса по номеру комментария;
  • разделить учеников или игроков на группы случайным порядком;
  • сгенерировать тестовые данные для таблицы или программы;
  • заменить бросок кубика в настольной игре.

Страница работает полностью в браузере: никакие числа и настройки никуда не отправляются, а после первой загрузки генератору вообще не нужен интернет. Для чувствительных розыгрышей запишите генерацию на видео — так участники увидят, что результат не подкручивали.

Частые вопросы

Чем этот генератор отличается от Math.random?

Здесь используется crypto.getRandomValues — криптографический генератор браузера, опирающийся на энтропию операционной системы. Последовательность Math.random теоретически предсказуема, а crypto — нет.

Можно ли использовать генератор для розыгрыша призов?

Да: задайте диапазон по номерам участников и включите режим «без повторов». Для прозрачности розыгрыша зафиксируйте процесс на скриншоте или видео.

Входят ли границы диапазона в выборку?

Да, минимум и максимум могут выпасть наравне с остальными числами. Например, в диапазоне 1–100 возможны и 1, и 100.

Почему нельзя получить 20 чисел без повторов из диапазона 1–10?

В диапазоне всего 10 разных чисел, поэтому 20 неповторяющихся взять неоткуда. Расширьте диапазон или выключите опцию «без повторов».

Можно ли генерировать отрицательные числа?

Да, минимум и максимум могут быть отрицательными. Главное, чтобы минимум был меньше максимума.

Сохраняются ли мои числа на сервере?

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