Web

[PHP] 난수, 랜덤값, 난수, 유니크, 고유한 값이 필요할 때

CodeSlave 2023. 3. 15. 14:52

rand() 함수

일반적으로 PHP에서 랜덤한 값을 출력한다고 한다면

아래와 같이 숫자로 임의의 값을 도출할 수 있습니다.

하지만 이런식의 랜덤값은 출력하다보면 언젠가는 중복될 여지가 남아있습니다.

<?php
// 0부터 getrandmax() 크기 사이의 임의의 난수 반환
// getrandmax() 참조 : https://www.php.net/manual/en/function.getrandmax.php
echo "출력 : ".rand();
	
// 1000부터 2000사이의 임의의 난수 반환
echo "출력 : ".rand(1000,2000);
?>

 

mt_rand() 함수

rand 함수와 거의 동일하지만 표시되는 난수 범위가 다릅니다.

mt_rand가 rand에 비해 실행 속도도 빠르고 생성할 수 있는 난수의 범위가 커서

mt_rand 사용이 권장됩니다.

rand 함수 : 윈도우에서 0 ~ 32,767 까지 난수 생성, 리눅스에서 0 ~ 2,147,483,647 까지 난수 생성.

mt_rand 함수 : 윈도우, 리눅스 환경 모두 0 ~ 2,147,483,647 까지 난수 생성.

 

uniqid() 함수

일반적으로 사용자 고유 식별 값 등 유니크한 Key 값이 필요해질 때 사용합니다.

현재 시간의 100만분의 1초를 16진수로 변환하기 때문에 중복확률이 매우 낮고

난수, 암호화 과정 등을 거치기 때문에 중복될 확률이 거의 없어 세션 할당에 많이 사용합니다.

<?php

//13자리의 16진수 문자열이 출력됩니다.
echo uniqid();

//접두어가 있다면 13자리 16진수 문자열 앞에 접두사가 붙습니다.
echo uniqid('Test_');

//두번째 인수에 true를 지정하면 23자리의 16진수 문자열이 출력됩니다.
echo uniqid('', tru);

//md5 암호화와 난수를 활용하여 더욱 복잡한 고유키를 만듭니다.
//rand 함수는 윈도우에서 0~32767, 리눅스에서 2147483647까지 난수가 생성
//mt_rand 함수는 윈도우와 리눅스에서 2147483647까지의 난수가 생성됩니다.

echo md5(uniqid(rand(), true));
echo md5(uniqid(mt_rand(), true));
?>