0


我想生成一个随机的 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 开头的正确方法吗?

4

3 回答 3

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));
于 2012-09-11T19:48:20.097 回答
2
do {
    $random = mt_rand(100000000, 999999999);
} while (strpos($random, '814') === 0);
于 2012-09-11T19:49:11.200 回答
-1

使用 preg_match 函数:

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

或使用

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

或使用

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

于 2012-09-11T19:48:27.183 回答