2012-07-30 5 views
1

나는 클라이언트를 위해 일하고 있었고 T56, N78, J89 등과 같이 [char] [int] [int] 형식으로 생성 된 코드를 원했습니다. char는 대문자 여야합니다. 나는 그것을 방금 ​​PHP에서 난수 생성기를 작성했는데 어떻게 개선 될 수 있다고 생각하십니까?

function randomizer(){ 
    $chars = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); 
    return $chars[array_rand($chars)].mt_rand(10, 99); 
} 

간단한

을 발견하지만 많은 다른 효율적인 솔루션이 될 것이라고 궁금해에 보관 나는이 기능을 쓴 급히으로

. 이 위의 코드는 작동하지만, 이러한 코드를 생성해야 할 때 효율성을 향한 노력이 필요합니다.

시작하기에 더 좋은 장소!

+1

'$ 문자의 =은 ('A ','Z ')를 범위;' – zerkms

+3

** 정적 **'$ 문자의 =은 ('A', 'Z')를 범위;' – nickb

+0

'는 T05 같은 값인 허용 되는가? 귀하의 기능은 그것들을 생성하지 않습니다. – Wug

답변

1
echo chr(mt_rand(65,90)).str_pad((rand()%100),2,0,STR_PAD_LEFT); 
+0

정말 멋지 네요. 내 코드는 T07과 같은 코드를 생성하지 않는다고 언급 했으므로 오류가있었습니다 ... – whizzzkid

0

가능한 경우 기능 외부에 $chars을 저장하고 싶으므로 매번 만들 필요가 없습니다 (예 : 루프에서 1000 개의 코드를 생성하려는 경우).

또한, 여기 당신이

$chars = range("A","Z");

0
function getRandStr() 
{ 
    return sprintf("%s%02d", chr(mt_rand(65, 90)), mt_rand(0, 99)); 
} 

편집에 대한 바로 가기입니다 : 댓글에 따라 변경, 감사 @DaveRandom.

+1

당신은'chr()'을 처음부터 잊어 버린 것 같아요. 그리고'ord ('A')'와'ord ('Z')'는 절대로 변경하지 않기 때문에 정수를 하드 코딩하는 것이 더 낫습니다. 게다가 sprintf ('% 02s', mt_rand (0, 99))는 두 번째 부분에 더 효율적일 것이라고 생각합니다. – DaveRandom