2011-07-03 4 views
3

나는 사용자를위한 임의의 보안 번호를 만드는 스크립트를 만들고 있는데, 나는 이것을 완료 할 수있는 방법을 찾고있다.PHP 루프 질문

보안 번호는 7 자리가 필요하지만 0은 포함되어 있지 않습니다. rand(1111111,9999999)을 사용할 때 0이 그 번호 안에있을 가능성이 있으며, 어떤 루프가 이것을 확인하는 것이 가장 좋을지 궁금합니다. 문자열에 0이 있는지 확인하기 위해 어떤 함수를 사용해야합니까?

답변

4

1에서 9 사이의 임의의 숫자를 7 번 연결하지 못했습니다?

rand(1,9) 
+0

내가 그 생각을하지, 감사를 기반으로! :) –

+0

대답을 수락하기 위해 3 분을 기다려야합니다. –

5

이 코드는 당신이 필요로하는 무엇을 수행해야합니다

$num = ''; 
for ($i = 1; $i <= 7; $i++) 
    $num .= rand(1, 9); 
$num = (int) $num; 

이 무작위로 숫자 하나 하나를 생성하고 그들과 함께 문자열을 작성합니다. 그런 다음 문자열을 정수로 변경합니다.

1

확인하는 동안 사용하면 총 9^7 건이 발생하므로 도움이되지 않습니다. 다음 번에 어떤 사건을 당할 지 알 수 없습니다. 그래서 rand를 7 번 사용하는 것이 좋습니다.

<?php 
function myRand($length){ 
$ans=0; 
for($i=0;$i<$length;$i++){ 
$ans=$ans*10+rand(1,9); 
} 
return $ans; 
} 

echo myrand(7); 
?> 
0

솔루션 기반 9.

$p = array(); 
$p[0] = 1; 
for ($i=1; $i<=6; $i++): 
    $p[$i] = $p[$i-1] * 9; 
endfor; 

$max = $p[6] * 9 - 1; 
$rand = rand(0,$max); 

$ret = array(); 
for ($i=6; $i>=0; $i--): 
    $tmp = $rand/$p[$i]; 
    $tmp = floor($tmp); 
    $rand = $rand - $p[$i] * $tmp; 
    $ret[] = (string)($tmp + 1); 
var_dump($tmp); 
endfor; 

$ret = implode($ret); 
var_dump($ret);