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 に答える