lcg_value()
Функция lcg_value() в PHP генерирует псевдослучайное число с помощью линейного конгруэнтного генератора (LCG)
Функция lcg_value() в PHP — это встроенная функция, которая генерирует псевдослучайное число с плавающей точкой с помощью алгоритма линейного конгруэнтного генератора (LCG). Она не принимает параметров и использует фиксированное внутреннее начальное значение для построения последовательности. На этой странице объясняется, что возвращает функция, как её использовать, как масштабировать результат до нужного диапазона и когда следует выбрать более безопасную альтернативу.
Что такое функция lcg_value()?
Линейный конгруэнтный генератор — это классический, лёгковесный алгоритм для получения последовательности чисел, которые выглядят случайными, но полностью определяются начальным значением. PHP предоставляет к нему доступ через lcg_value(), которая возвращает число с плавающей точкой в диапазоне (0, 1) — то есть больше 0 и меньше 1.
На практике важны два свойства:
- Нет аргументов. Функция вызывается как
lcg_value()с пустыми скобками; передача аргументов не имеет эффекта. - Результат типа float. Функция всегда возвращает
float, а не целое число. Чтобы получить целое число, результат масштабируют вручную (пример показан ниже).
Как использовать функцию lcg_value()
Использование функции lcg_value() в PHP очень простое. Вот базовый пример:
В этом примере мы вызываем функцию lcg_value() для генерации псевдослучайного числа. Результат сохраняется в переменную и выводится на экран.
Генерация чисел в заданном диапазоне
Поскольку lcg_value() возвращает число с плавающей точкой от 0 до 1, его можно масштабировать до нужного диапазона или получить целое число:
<?php
// Generate a random integer between 1 and 100
$min = 1;
$max = 100;
$random_int = (int)($min + lcg_value() * ($max - $min + 1));
echo $random_int;
?>Важные замечания
- Не криптографически безопасна: Алгоритм LCG предсказуем и не должен использоваться для задач, связанных с безопасностью, таких как генерация токенов, паролей или идентификаторов сессий. Для криптографических целей используйте
random_int()илиrandom_bytes(). - Фиксированное начальное значение: Функция использует фиксированное внутреннее начальное значение, то есть последовательность чисел будет одинаковой при разных запусках скрипта, пока PHP-процесс не будет перезапущен.
- Диапазон не включает границы: Возвращаемое значение никогда не равно точно 0 или 1, поэтому формула масштабирования выше может безопасно включать оба граничных значения диапазона
$min–$max. - Устарела в PHP 8.4: Начиная с PHP 8.4 функция
lcg_value()объявлена устаревшей в пользу\Random\Randomizer::getFloat(). Она по-прежнему работает, но генерирует уведомление об устаревании, поэтому в новом коде предпочтительнее использовать новый API.
lcg_value() в сравнении с другими функциями генерации случайных чисел
lcg_value() — одна из нескольких функций для работы со случайными числами в PHP. Выбирайте в зависимости от задачи:
- Для случайных целых чисел в диапазоне
rand()иmt_rand()обычно удобнее, чем масштабироватьlcg_value()вручную. - Чтобы узнать верхнюю границу, которую могут возвращать эти генераторы, см.
getrandmax()иmt_getrandmax(). - Для воспроизводимых последовательностей при тестировании задайте начальное значение генератора Мерсенна с помощью
mt_srand(). - Для задач, связанных с безопасностью, предпочтительнее использовать
random_int()вместо всех перечисленных выше.
Заключение
Функция lcg_value() предоставляет простой способ генерировать псевдослучайные числа с плавающей точкой в PHP. Несмотря на то что она полезна для базовых симуляций или приложений, не связанных с безопасностью, в современной разработке на PHP обычно предпочитают random_int() ради лучшей случайности и безопасности. Надеемся, что это руководство поможет вам эффективно использовать lcg_value() в ваших проектах.