PHP에서 랜덤 숫자를 생성 할 때 두 가지 공통 함수는 lcg_value () 및 mt_rand () 입니다. 그들은 모두 임의의 숫자를 생성하는 데 사용될 수 있지만 특정 사용 시나리오, 성능, 무작위성 및 이식성에서 장점과 단점이 있습니다. 이 기사는이 두 기능을 자세히 비교하여 개발자가 필요에 따라 적절한 임의 번호 생성 체계를 선택할 수 있도록 도와줍니다.
lcg_value ()
이것은 선형 합동 발전기 (LCG, 선형 합동 발전기)를 기반으로 PHP에서 구현 된 무작위 생성 기능입니다. 부동 소수점 숫자가 필요한 시나리오에서 일반적으로 사용되는 0과 1 사이의 부동 소수점 번호를 반환합니다.
mt_rand ()
PHP 내장 Mersenne Twister Random Number Generation 기능. 기본 범위는 0에서 mt_getrandmax () 의 정수를 생성하며, 이는 일반적으로 성능이 향상되고 강한 무작위성을 갖습니다.
기능 | 반환 유형 | 기본 범위 | 설명 |
---|---|---|---|
lcg_value () | 뜨다 | 0.0 ≤ x <1.0 | 십진수 랜덤 숫자가 필요한 시나리오에 적합합니다 |
mt_rand () | 정수 (int) | 0 ~ mt_getrandmax () | 임의의 정수 생성에 적합한 사용자 정의 가능한 범위 |
일반적으로 말하면 MT_Rand ()는 알고리즘 최적화로 인해 LCG_VALUE () 보다 더 잘 수행합니다. 많은 수의 무작위 숫자 생성이 생성되는 시나리오에서는 MT_Rand ()가 작업을 더 빨리 완료 할 수 있습니다.
MT_RAND () 알고리즘은 Mersenne Twister를 기반으로하며 최대 2^19937-1의 기간이며 빠르게 생성됩니다.
lcg_value () 는 단기간과 속도가 느린 선형 합동 알고리즘을 기반으로합니다.
무작위 성
Mersenne Twister 알고리즘은 무작위성이 우수하며 게임, 시뮬레이션 및 일반적인 무작위 요구에 적합합니다.
선형 합동 발생기는 무작위성이 좋지 않으며 단기간에 문제가 있으며 분포가 고르지 않습니다.
보안 <br> 암호화 적으로 안전한 경우에는 적합하지 않습니다.
PHP 7 이상에서 random_int () 또는 random_bytes () 와 같은 안전한 기능을 사용하는 것이 좋습니다.
<?php
// 생성 a0그리고1사이의 부동 소수점 번호
$randomFloat = lcg_value();
echo "임의의 부동 소수점 번호: " . $randomFloat;
?>
<?php
// 생성 a0그리고100사이의 정수
$randomInt = mt_rand(0, 100);
echo "임의의 정수: " . $randomInt;
?>
장면 | 권장 기능 | 설명 |
---|---|---|
플로팅 포인트 랜덤 숫자가 필요합니다 | lcg_value () | 확률 계산과 같은 시나리오에 적합한 간단한 부동 소수점 번호 생성 |
고성능 정수 랜덤 숫자가 필요합니다 | mt_rand () | 대부분의 게임, 시뮬레이션 및 일반 임의의 요구 사항이 선호됩니다 |
암호화 적으로 안전한 임의의 숫자가 필요합니다 | PHP 7+ 내장 보안 기능 | random_int () 또는 random_bytes () 사용 |
PHP Random Number 기능에 대한 자세한 내용은 공식 문서를 참조하십시오 : https://gitbox.net/manual/en/function.lcg-value.php 및 https://gitbox.net/manual/function.mt-rand.phpp