W3docs

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 очень простое. Вот базовый пример:

php— editable, runs on the server

В этом примере мы вызываем функцию 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() в ваших проектах.

Практика

Практика
Что делает функция lcg_value() в PHP?
Что делает функция lcg_value() в PHP?
Was this page helpful?