Current Location: Home> Latest Articles> lcg_value() and mt_rand(): Which one is better for you?

lcg_value() and mt_rand(): Which one is better for you?

gitbox 2025-05-29

When generating random numbers in PHP, two common functions are lcg_value() and mt_rand() . They can all be used to generate random numbers, but they have their advantages and disadvantages in specific usage scenarios, performance, randomness and portability. This article will compare these two functions in detail to help developers choose appropriate random number generation schemes according to their needs.


1. Basic introduction

  • lcg_value()
    This is a random number generation function implemented in PHP based on the linear congruent generator (LCG, Linear Congruential Generator). It returns a floating point number between 0 and 1, which is usually used in scenarios where floating point random numbers are required.

  • mt_rand()
    PHP built-in Mersenne Twister random number generation function. It generates integers, with the default range of 0 to mt_getrandmax() , which usually has better performance and strong randomness.


2. Random number type and range

function Return type Default range illustrate
lcg_value() Float 0.0 ≤ x < 1.0 Suitable for scenarios where decimal random numbers are required
mt_rand() Integer (int) 0 to mt_getrandmax() Customizable ranges suitable for random integer generation

3. Performance comparison

Generally speaking, mt_rand() performs better than lcg_value() due to algorithm optimization. In a scenario where a large number of random number generation is generated, mt_rand() can complete the task faster.

  • The mt_rand() algorithm is based on Mersenne Twister, with a period of up to 2^19937-1 and is generated quickly.

  • lcg_value() is based on a linear congruent algorithm, with a short period and a slower speed.


4. Randomness and security

  • Randomity
    The Mersenne Twister algorithm has better randomness and is suitable for gaming, simulation and general random needs.
    The linear congruent generator has poor randomness, and there are problems of short periods and uneven distribution.

  • Security <br> Neither is suitable for cryptographically secure occasions.
    It is recommended to use safer functions such as random_int() or random_bytes() in PHP 7 and above.


5. Use examples

Use lcg_value()

 <?php
// Generate a0and1Floating point numbers between
$randomFloat = lcg_value();
echo "Random floating point number: " . $randomFloat;
?>

Use mt_rand()

 <?php
// Generate a0and100Integer between
$randomInt = mt_rand(0, 100);
echo "Random integers: " . $randomInt;
?>

6. Summary of applicable scenarios

Scene Recommended functions illustrate
Requires floating point random numbers lcg_value() Simple floating point number generation, suitable for scenarios such as probability calculation
Need high-performance integer random numbers mt_rand() Most games, simulations, and ordinary random requirements are preferred
Cryptographically secure random numbers are required PHP 7+ built-in security functions Use random_int() or random_bytes()

7. Related information

For more information about PHP random number functions, please refer to the official documentation: https://gitbox.net/manual/en/function.lcg-value.php and https://gitbox.net/manual/en/function.mt-rand.php