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


PHP generate random number without a certain prefix?


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

这是一个合理的方法来获得一个不以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));
do {
    $random = mt_rand(100000000, 999999999);
} while (strpos($random, '814') === 0);

使用preg_match函数:

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

或者使用

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

或者使用

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