Обновлено:

Рандом цифр

Нужно выбрать победителя конкурса, сгенерировать пароль или протестировать алгоритм на произвольных данных – во всех случаях требуется рандом цифр. Проблема в том, что «случайность» в компьютерах не случайна, а диапазоны и условия каждый раз разные. Ниже – формулы, примеры кода и онлайн-калькулятор, который выдаст готовое число за секунду.

Режим генерации
Параметры целых чисел
Включительно
Включительно
Чисел для генерации
Без повторений
История генераций

Важно: Этот генератор использует Math.random() и подходит для игр, тестов и прототипов. Для криптографических задач (пароли, токены) используйте crypto.getRandomValues().

Что такое генерация случайных чисел

Рандом цифр – это процесс получения числа из заданного диапазона, где у каждого значения равная вероятность выпадения. В программировании это делают через генераторы псевдослучайных чисел (PRNG – Pseudo-Random Number Generator). Они вычисляют результат по математической формуле от начального значения – сида (seed). Последовательность выглядит случайной, но при одном и том же сиде воспроизводится полностью [thecode.media].

Истинно случайные числа получают из физических процессов: тепловой шум процессора, радиоактивный распад, атмосферные помехи. Такие генераторы стоят в криптографических модулях и аппаратных ключах.

Как получить случайное число в диапазоне

Базовый метод Math.random() в JavaScript возвращает число с плавающей точкой от 0 включительно до 1 не включительно – то есть 0 ≤ x < 1. Чтобы получить рандом цифр в нужном диапазоне, значение масштабируют и сдвигают.

Целые числа

Формула для целого числа от min до max включительно:

Math.floor(Math.random() * (max - min + 1)) + min

Разбор по шагам:

  1. Math.random() даёт число от 0 до 0,999…
  2. Умножение на (max - min + 1) растягивает диапазон до нужной длины
  3. Math.floor() округляет вниз до целого
  4. + min сдвигает начало диапазона от нуля к минимуму

Почему +1? Без него max никогда не выпадет – Math.random() не возвращает 1, а Math.floor() всегда округляет вниз [thecode.media].

Примеры:

ЗадачаВызовРезультат
От 1 до 10Math.floor(Math.random() * 10) + 11, 2, …, 10
От 0 до 99Math.floor(Math.random() * 100)0, 1, …, 99
Орёл или решкаMath.floor(Math.random() * 2)0 или 1
Бросок кубикаMath.floor(Math.random() * 6) + 11, 2, …, 6

Дробные числа

Для дробного числа от min до max без контроля точности:

Math.random() * (max - min) + min

С контролем знаков после запятой:

function getRandomFloat(min, max, decimals = 2) {
  const random = Math.random() * (max - min) + min;
  return parseFloat(random.toFixed(decimals));
}

// Дробное от 5,5 до 7,8 с двумя знаками
getRandomFloat(5.5, 7.8, 2); // 6.37

Метод .toFixed() возвращает строку, поэтому parseFloat() преобразует обратно в число [thecode.media].

Практические задачи с рандомом цифр

Случайный выбор из массива

Умножьте Math.random() на длину массива, округлите вниз – получите валидный индекс:

const items = ['А', 'Б', 'В', 'Г', 'Д'];
const randomItem = items[Math.floor(Math.random() * items.length)];

Подходит для ротации баннеров, вывода случайных цитат, выбора победителя из списка.

Генерация случайного цвета

HEX-формат – число от 0 до 16 777 215 (0xFFFFFF), переведённое в шестнадцатеричную систему:

function getRandomHexColor() {
  const hex = Math.floor(Math.random() * 0xffffff).toString(16);
  return `#${hex.padStart(6, '0')}`;
}

RGB-формат – три отдельных канала от 0 до 255:

function getRandomRgbColor() {
  const r = Math.floor(Math.random() * 256);
  const g = Math.floor(Math.random() * 256);
  const b = Math.floor(Math.random() * 256);
  return `rgb(${r}, ${g}, ${b})`;
}

Оба формата описывают 16 777 216 цветов (256 × 256 × 256) [thecode.media].

Быстрая генерация ID

Без сторонних библиотек можно получить случайную строку из 8 символов:

const id = Math.random().toString(36).substring(2, 10);
// "k3j9f2x1"

.toString(36) переводит число в буквенно-цифровой формат (цифры + латинские буквы), .substring(2, 10) убирает «0.» и берёт 8 символов. Подходит для прототипов и моковых данных, но не для продакшен-идентификаторов – возможны коллизии [thecode.media].

Когда Math.random() не подходит

Метод Math.random() – псевдослучайный генератор. Если известен алгоритм и внутреннее состояние, последовательность восстанавливается. Это делает его непригодным для задач, где важна криптографическая стойкость:

  • генерация паролей и токенов доступа
  • создание ключей шифрования
  • CSRF-токены и секреты сессий

Для этих целей в браузере используют crypto.getRandomValues(), в Node.js – crypto.randomBytes(). Они получают энтропию от операционной системы и устойчивы к предсказанию.

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

Какой генератор выбрать

КритерийMath.random()crypto.getRandomValues()
СкоростьБыстрыйМедленнее
ПредсказуемостьТеоретически предсказуемНепредсказуем
Подходит дляИгры, тесты, UI, прототипыПароли, токены, ключи
ДоступностьВсе JS-средыБраузер + Node.js

Для бытовых задач – рандом цифр для розыгрыша, тестовых данных, игровых механик – Math.random() достаточно. Для безопасности – только криптографически стойкие генераторы.

Частые ошибки при работе с рандомом

  1. Забыли +1 в формуле целых чисел – максимальное значение никогда не выпадет.
  2. Использовали Math.round() вместо Math.floor() – крайние значения (min и max) выпадают с вдвое меньшей вероятностью, чем промежуточные.
  3. Пытались получить рандом цифр умножением на max – при max = 10 и Math.random() = 0.999… результат Math.floor(0.999… × 10) даст 9, а не 10.
  4. Использовали Math.random() для паролей – предсказуемая энтропия, уязвимость к брутфорсу.

Проверяйте формулу на границах: подставьте Math.random() = 0 и Math.random() = 0.999…, чтобы убедиться в корректности диапазона.

Часто задаваемые вопросы

Чем псевдослучайные числа отличаются от истинно случайных?

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

Можно ли предсказать результат Math.random()?

Теоретически да: если известен алгоритм генератора и его внутреннее состояние, последовательность восстанавливается. На практике без доступа к состоянию это крайне сложно, но для криптографии Math.random() не используют.

Как сгенерировать случайное число без повторений?

Создайте массив всех возможных значений, перемешайте его (алгоритм Фишера – Йетса) и берите элементы по порядку. Это гарантирует уникальность каждого числа в выборке.

Почему рандом иногда выдаёт одинаковые числа подряд?

Случайность не исключает повторов – это особенность равномерного распределения. Если бросать кубик, шестёрка может выпасть дважды или трижды подряд. Длинные серии одинаково вероятны, как и любые другие комбинации.

Какой генератор использовать для паролей и токенов?

Только криптографически стойкие: crypto.getRandomValues() в браузере или crypto.randomBytes() в Node.js. Они получают энтропию от операционной системы и подходят для защиты данных.

  1. Random случайные числа онлайн – генератор и примеры
  2. Рандомно 2 числа: генерация случайных чисел в JavaScript
  3. Рандомайзер до 2: генератор случайных чисел 0, 1, 2 онлайн
  4. Случайное трехзначное число: генерация в JavaScript и онлайн-калькулятор
  5. Случайное число от 0: формулы и генератор на JavaScript
  6. Случайное натуральное число: генерация и формулы