我正在创建一个为用户创建随机安全号的脚本,我正在研究如何完成此操作。
我需要一个7位数的安全号码但不包含0.但是当使用rand(1111111,9999999)
时,仍有可能0
在该号码内,我想知道哪个循环最好检查这个以及我将使用什么函数来检查字符串中是否存在0?
答案 0 :(得分:5)
此代码应该满足您的需求:
$num = '';
for ($i = 1; $i <= 7; $i++)
$num .= rand(1, 9);
$num = (int) $num;
它逐个随机生成数字并用它们构建一个字符串。然后,它将字符串更改为整数。
答案 1 :(得分:4)
难道你不能在1到9次之间连续随机数7次吗?
rand(1,9)
答案 2 :(得分: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);
?>
答案 3 :(得分: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);