IZN Tools

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

Диапазон, количество и опция «без повторов».

Ожидание ввода
Используется криптографический источник случайности браузера. Для выборок и тестовых данных подходит; для секретов берите генератор ключей.
Посчитано на вашем устройстве

Насколько случайно нужно

Разным задачам нужны разные гарантии.

| Задача | Что требуется | | --- | --- | | Выбрать тестовый случай | что угодно, включая Math.random | | Перемешать плейлист | равномерность без смещения | | Розыгрыш призов | без смещения и с возможностью проверки | | Секретный ключ | криптостойкость и никакого повторного использования |

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

Смещение по модулю и почему его здесь нет

Очевидный способ отобразить случайное 32-битное число на 1–10 — это value % 10. Он же и неверный: 2³² не делится на 10, поэтому первые шесть значений выпадают чуть чаще. На десятке бросков этого никто не заметит, на миллионах — измеримо. Повторный розыгрыш при попадании за пределы рабочего диапазона убирает перекос полностью, ценой редкой лишней попытки.

Без повторов

Выборка без возвращения — это то, что нужно для определения победителей, распределения мест или отбора части тестовых строк. Диапазон должен быть не меньше количества: инструмент проверяет это и называет максимум, а не отдаёт молча меньше чисел, чем запрошено.

Ничего никуда не уходит

Розыгрыш идёт в браузере, числа не передаются и не логируются. После перезагрузки страницы предыдущий результат исчезает окончательно.

Вопросы

Годится ли это для розыгрыша призов?+

Используется `crypto.getRandomValues` — криптографический источник браузера, а не `Math.random`. Он действительно непредсказуем и не смещён. Чего он не даёт, так это *проверяемости*: сторонний наблюдатель не может убедиться, что розыгрыш прошёл так, как заявлено. Для публичного розыгрыша нужен способ, который зрители могут проверить, или сервис с публикуемым сидом.

Почему нельзя получить 100 уникальных чисел от 1 до 10?+

Потому что различных значений всего десять. Без повторов количество не может превысить размер диапазона, и инструмент говорит об этом прямо, а не молча возвращает десять.

Распределение действительно равномерное?+

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

Можно ли так генерировать пароли?+

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