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