我想生成一个随机的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);