2011-07-03 101 views
3

我正在創建一個爲用戶創建隨機安全編號的腳本,我正在研究如何完成此操作。PHP循環問題

我需要一個7位數的安全號碼,但不包含0,但是當使用rand(1111111,9999999)時,該號碼內仍有可能存在0,我想知道哪個迴路最好檢查一下,我會用什麼函數來檢查字符串中是否存在0?

回答

4

難道你不能連續7次在1和9之間的隨機數?

rand(1,9) 
+0

我從來沒有想到這一點,謝謝! :) –

+0

我必須等待3分鐘才能接受答案 –

5

此代碼應該做你需要的東西:

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

它隨機產生數字逐一建立一個字符串他們。然後,它將字符串更改爲一個整數。

1

使用while檢查不會有幫助,因爲總共有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);