Рандом цифр
Нужно выбрать победителя конкурса, сгенерировать пароль или протестировать алгоритм на произвольных данных – во всех случаях требуется рандом цифр. Проблема в том, что «случайность» в компьютерах не случайна, а диапазоны и условия каждый раз разные. Ниже – формулы, примеры кода и онлайн-калькулятор, который выдаст готовое число за секунду.
Что такое генерация случайных чисел
Рандом цифр – это процесс получения числа из заданного диапазона, где у каждого значения равная вероятность выпадения. В программировании это делают через генераторы псевдослучайных чисел (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
Разбор по шагам:
Math.random()даёт число от 0 до 0,999…- Умножение на
(max - min + 1)растягивает диапазон до нужной длины Math.floor()округляет вниз до целого+ minсдвигает начало диапазона от нуля к минимуму
Почему +1? Без него max никогда не выпадет – Math.random() не возвращает 1, а Math.floor() всегда округляет вниз [thecode.media].
Примеры:
| Задача | Вызов | Результат |
|---|---|---|
| От 1 до 10 | Math.floor(Math.random() * 10) + 1 | 1, 2, …, 10 |
| От 0 до 99 | Math.floor(Math.random() * 100) | 0, 1, …, 99 |
| Орёл или решка | Math.floor(Math.random() * 2) | 0 или 1 |
| Бросок кубика | Math.floor(Math.random() * 6) + 1 | 1, 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в формуле целых чисел – максимальное значение никогда не выпадет. - Использовали
Math.round()вместоMath.floor()– крайние значения (min и max) выпадают с вдвое меньшей вероятностью, чем промежуточные. - Пытались получить рандом цифр умножением на
max– приmax = 10иMath.random() = 0.999…результатMath.floor(0.999… × 10)даст 9, а не 10. - Использовали
Math.random()для паролей – предсказуемая энтропия, уязвимость к брутфорсу.
Проверяйте формулу на границах: подставьте Math.random() = 0 и Math.random() = 0.999…, чтобы убедиться в корректности диапазона.
Часто задаваемые вопросы
Чем псевдослучайные числа отличаются от истинно случайных?
Можно ли предсказать результат Math.random()?
Как сгенерировать случайное число без повторений?
Почему рандом иногда выдаёт одинаковые числа подряд?
Какой генератор использовать для паролей и токенов?
Похожие калькуляторы и статьи
- Random случайные числа онлайн – генератор и примеры
- Рандомно 2 числа: генерация случайных чисел в JavaScript
- Рандомайзер до 2: генератор случайных чисел 0, 1, 2 онлайн
- Случайное трехзначное число: генерация в JavaScript и онлайн
- Случайное число от 0: формулы и генератор на JavaScript
- Случайное натуральное число: генерация и формулы