web-dev-qa-db-ja.com

6桁の一意の番号を生成するにはどうすればよいですか?

6桁の一意の番号を生成するにはどうすればよいですか?重複したエントリをチェックするための検証メカニズムがあります。

28
AAA
$six_digit_random_number = mt_Rand(100000, 999999);

もちろん、100,000から999,999までのすべての数字は6桁です。

112
Charles

000001から開始して999999に移動する場合:

$num_str = sprintf("%06d", mt_Rand(1, 999999));

気を付けて、それは文字列として保存されます。

33
Tim Cooper

もう一つ:

str_pad(mt_Rand(0, 999999), 6, '0', STR_PAD_LEFT);

とにかく、一意性のために、番号がまだ使用されていないことを確認する必要があります。

重複をチェックするですが、ほとんどの数字が使用されると、新しい数字を取得するための「試行」の回数(およびそのためにかかる時間)が増加し、結果として非常に長い遅延とCPUリソースの浪費。

可能であれば、配列内の利用可能なIDを追跡し、利用可能なIDの中からランダムに選択することをお勧めします (IDリストがメモリに保持されている場合):

$arrayOfAvailableIDs = array_map(function($nb) {
    return str_pad($nb, 6, '0', STR_PAD_LEFT);
}, range(0, 999999));

$nbAvailableIDs = count($arrayOfAvailableIDs);

// pick a random ID

$newID = array_splice($arrayOfAvailableIDs, mt_Rand(0, $nbAvailableIDs-1), 1);
$nbAvailableIDs--;

IDリストがデータベースに保存されている場合でも、同様のことができます。

10
Frosty Z
<?php
$file = 'count.txt';

//get the number from the file
$uniq = file_get_contents($file);

//add +1
$id = $uniq + 1 ;

// add that new value to text file again for next use
file_put_contents($file, $id);

// your unique id ready
echo $id;
?>

これがうまくいくことを願っています。私は私のウェブサイトで同じテクニックを使用しています。

8
virus

ここに別のものがあります:

substr(number_format(time() * Rand(),0,'',''),0,6);
4
law.vzmk

これにより、ランダムな6桁の数字が生成されます

<?php
    mt_Rand(100000,999999);
?>
3
Ananta Prasad
        $characters = '123456789';
        $charactersLength = strlen($characters);
        $randomString = '';
            for ($i = 0; $i < 6; $i++) {
                $randomString .= $characters[Rand(0, $charactersLength - 1)];
            }
        $pin=$randomString; 

私はアルゴリズムを使用しますが、ブルートフォースは次のようになります。

最初のループ処理:100,000から999,999の間の乱数を生成し、そのx1を呼び出します

ループの2回目100,000〜x1の乱数を生成してこのxt2を呼び出し、次にx1〜999,999の乱数を生成してこのxt3を呼び出し、次にランダムにx2またはx3を選択し、このx2を呼び出します

ループのN回目100,000〜x1、x1〜x2、x2〜999,999などの乱数を生成します...

エンドポイントに注意、x1にも注意

1
rossb83

<?php echo Rand(100000,999999); ?>

乱数を生成できます

1

PHP 7.0+ではrandom_int($min, $max)overmt_Rand()をお勧めします。

$randomSixDigitInt = \random_int(100000, 999999);
0
Yes Barry