PHP rand() 함수란?
rand() 함수는 PHP에서 의사 난수(pseudo random number) 생성 기법을 사용하여 정수를 반환하는 내장 함수입니다. 인자 없이 호출하면 0부터 플랫폼별 최댓값(getrandmax()) 사이의 임의의 정수를 반환하며, 64비트 Windows 운영체제에서는 최댓값이 2147483647입니다.
rand() 함수는 두 가지 방식으로 호출할 수 있습니다.
- 인자 없이 호출: 기본 범위(0 ~ getrandmax()) 내에서 난수를 생성합니다.
- min과 max 지정 후 호출: 지정한 범위 내에서만 난수를 생성합니다.
이 함수는 항상 정수(int)를 반환한다는 점에 유의하세요.
문법(Syntax)
rand ( void ) : int rand ( int $min , int $max ) : int
매개변수(Parameters)
| 번호 | 매개변수 및 설명 |
|---|---|
| 1 | min 반환할 난수 범위의 하한값입니다. 기본값은 0입니다. |
| 2 | max 반환할 난수 범위의 상한값입니다. 기본값은 getrandmax()입니다. |
반환 값(Return Values)
rand() 함수는 의사 난수 생성 기법을 사용하여 min과 max 사이의 정수를 반환합니다.
⚠️ 주의: rand() 함수는 암호학적 보안이 필요한 용도(예: 토큰 생성, 비밀번호 난수화 등)에는 적합하지 않습니다. 보안이 중요한 경우에는 PHP 7 이상에서 제공되는 random_int() 함수를 사용하는 것이 좋습니다.
PHP 버전 호환성
rand() 함수는 PHP 4.x, PHP 5.x, PHP 7.x 모든 버전에서 사용할 수 있습니다. 참고로 PHP 7.1부터 rand()는 내부적으로 더 빠른 알고리즘을 사용하는 mt_rand()의 별칭(alias)으로 동작합니다.
예제 1: 인자 없이 rand() 호출하기
매개변수 없이 rand()를 호출하면 기본 범위 내에서 난수가 반환됩니다.
<?php echo "인자 없이 호출한 rand() = " . rand() . "\n"; echo "다시 한 번 호출한 rand() = " . rand() . "\n"; ?>
출력 결과
난수 특성상 실행할 때마다 다른 값이 출력될 수 있습니다.
random number with no parameters rand() = 1663374457 another random number with no parameters rand() = 888196648
예제 2: min과 max 범위 지정하기
min과 max 인자를 지정하면 해당 범위 안에서만 난수가 생성됩니다.
<?php
echo "rand(11,30) = " . rand(11,30) . "\n";
echo "rand(11,30) = " . rand(11,30) . "\n";
?>
출력 결과
rand(11,30) = 29 rand(11,30) = 22
예제 3: 실수(float) 값 전달 시 소수점 처리
min 또는 max 매개변수에 실수 값을 전달하면 소수점 이하 자릿수는 무시됩니다.
<?php
echo "rand(10.5,50.95) = " . rand(10.55, 50.95) . "\n";
?>
출력 결과
rand(10.5,50.95) = 45
예제 4: 문자열 값 전달 시 오류 발생
min 또는 max 매개변수에 문자열을 직접 전달하면 구문 분석 오류(Parse Error)가 발생합니다.
<?php
echo "rand("aa", "bb") = " . rand("aa","bb") . "\n";
?>
출력 결과
PHP Parse error: syntax error, unexpected 'aa' (T_STRING), expecting ',' or ';'
정리
PHP의 rand() 함수는 간단한 난수 생성 작업에 유용하게 활용할 수 있는 함수입니다. 다만 다음 사항을 기억하세요.
- 항상 정수형 값을 반환합니다.
- 기본 범위는 0 ~ getrandmax()이며, min/max로 범위를 조절할 수 있습니다.
- 실수 입력 시 소수점은 잘려나갑니다.
- 암호화 목적으로는 사용하지 말고, 대신
random_int()를 사용하세요. - PHP 7.1 이후에는 내부적으로 mt_rand() 알고리즘으로 동작합니다.