[PHP] 무작위 문자열 만들기

Posted at 2012.11.08 14:34 | Posted in 프로그래밍

임시 비밀번호를 설정한다거나 특별한 ID를 만들기 위해 의미없는 문자열을 만들어야 할 때가 있다. 이 때, ASCII를 활용하면 매우 간단히 의미없는 무작위 문자열을 만들어낼 수 있다.

function randString($length, $difficulty = 'a') {
	$arr = array();
	for($i = 0, $cnt = strlen($difficulty); $i < $cnt; $i++) {
		$str = ord(substr($difficulty, $i, 1));
		if(in_array($str, $arr)) continue;

		if($str >= 32 && $str <= 126) {
		if($str >= 97 && $str <= 122) for($j = 97; $j <= 122; $j++) $arr[] = $j; //a-z
			elseif($str >= 65 && $str <= 90) for($j = 65; $j <= 90; $j++) $arr[] = $j; //A-Z
			elseif($str >= 48 && $str <= 57) for($j = 48; $j <= 57; $j++) $arr[] = $j; //0-9
			else {
				for($j = 32; $j <= 47; $j++) $arr[] = $j;
				for($j = 58; $j <= 64; $j++) $arr[] = $j;
				for($j = 91; $j <= 96; $j++) $arr[] = $j;
				for($j = 123; $j <= 126; $j++) $arr[] = $j;
			}
		}
	}
	$cnt = count($arr)-1;

	$string = '';
	for($i = 0; $i < $length; $i++) $string .= chr($arr[rand(0, $cnt)]);

	return $string;
}
이전 버전
function randString($length, $difficulty = 0) {
	if($difficulty < 0) return '';

	$arr = array();
	for($i = 48; $i <= 57; $i++) $arr[] = $i; //0-9
	if($difficulty >= 1) for($i = 65; $i <= 90; $i++) $arr[] = $i; //A-Z
	if($difficulty >= 2) for($i = 97; $i <= 122; $i++) $arr[] = $i; //a-z
	if($difficulty >= 3) {
		for($i = 32; $i <= 47; $i++) $arr[] = $i;
		for($i = 58; $i <= 64; $i++) $arr[] = $i;
		for($i = 91; $i <= 96; $i++) $arr[] = $i;
		for($i = 123; $i <= 126; $i++) $arr[] = $i;
	} //Special Chars
	$cnt = count($arr)-1;

	$string = '';
	for($i = 0; $i < $length; $i++) $string .= chr($arr[rand(0, $cnt)]);
	
	return $string;
}

실행결과(소스코드)

저작자 표시 비영리
신고

Name __

Password __

Link (Your Website)

Comment