Генерация случайных чисел

TypeScript:
Генерация случайных чисел

Как:

В TypeScript вы можете генерировать случайные числа, используя глобальный объект Math. Ниже приведены некоторые практические примеры, демонстрирующие, как производить случайные числа для различных потребностей.

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

Чтобы сгенерировать простое случайное десятичное число между 0 (включительно) и 1 (исключительно), используйте Math.random(). Это не требует дополнительных манипуляций:

const randomNumber = Math.random();
console.log(randomNumber);

Это может вывести значение, например, 0.8995452185604771.

Генерация Случайного Целого Числа Между Двумя Значениями

Когда вам нужно целое число между двумя конкретными значениями, вы включаете как Math.random(), так и некоторые арифметические операции:

function getRandomInt(min: number, max: number): number {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

const randomInt = getRandomInt(1, 10);
console.log(randomInt);

Это может вывести целочисленное значение между 1 и 10, например, 7.

Генерация Уникального Идентификатора

Случайные числа можно сочетать с другими методами для создания уникальных идентификаторов, например, простой отрывок генератора UUID:

function generateUUID(): string {
    return 'xxxxyxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
        const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}

const uuid = generateUUID();
console.log(uuid);

Это генерирует строку, похожую на UUID, например, 110e8400-e29b-41d4-a716-446655440000.

Погружение

Основной метод генерации случайных чисел в JavaScript и, таким образом, в TypeScript, Math.random(), использует генератор псевдослучайных чисел (PRNG). Важно отметить, что, хотя результаты могут показаться случайными, они генерируются детерминированным алгоритмом на основе начального значения seed. Поэтому числа, производимые Math.random(), не являются действительно случайными и не должны использоваться в криптографических целях.

Для криптографически безопасных случайных чисел Web Crypto API предлагает crypto.getRandomValues(), который доступен в средах, поддерживающих стандарт Web Crypto, включая современные браузеры и Node.js (через модуль crypto). Вот быстрый пример, иллюстрирующий его использование в TypeScript для генерации безопасного случайного числа в пределах диапазона:

function secureRandom(min: number, max: number): number {
    const array = new Uint32Array(1);
    window.crypto.getRandomValues(array);
    return min + (array[0] % (max - min + 1));
}

const secureRandNum = secureRandom(1, 100);
console.log(secureRandNum);

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