PHP生成没有特定前缀的随机数?

时间:2012-09-11 19:45:53

标签: php random


我想生成一个随机的9个字符的长整数。
我也想确保前3位不是814。
这是我到目前为止提出的:

生成数字的功能:

public function randnum(){
$random = substr(number_format(time() * rand(),0,'',''),0,9);
return $random
}


我希望在哪里得到这个号码。

$random;
while ((substr(randnum(),0,3)) == '814'){
$random=substr(randnum(),0,3));
}

这是确保我获得的数字不是以814开头的正确方法吗?

3 个答案:

答案 0 :(得分:3)

获取一个不以814开头的数字是一种合理的方法,但这不是获得随机数字的合理方法。您不应该time()涉及mt_rand,您应该使用rand代替do { $random = sprintf("%09d", mt_rand(0, 999999999)); } while (substr($random, 0, 3) == "814");

你可以这样做得更好:

do {
    $random = sprintf("%03d", mt_rand(0, 999));
} while $random == "814";

$random = $random.sprintf("%06d", mt_rand(0, 999999));

如果你不关心生成的随机数的分布(即你的数字只是不可预测的而不是随机),你就是要产生大量这些,优化一点可能是有意义的:

{{1}}

答案 1 :(得分:3)

do {
    $random = mt_rand(100000000, 999999999);
} while (strpos($random, '814') === 0);

答案 2 :(得分:-1)

使用preg_match func:

preg_match("/[^814]/", $str);

或使用

str_replace("814", "", $str);

或使用

preg_replace(" / ^ 814 /","",$ str);