4

以下のコードは 8 桁を生成していますが、db に格納する際に 7 桁として格納される場合があります。db 列の幅は int(11) と見なされ、db は mysql(5.0.45) です。

srand ((double) microtime( )*1000000);
 $maxid = rand(0,100000000);
 $mtidno = str_pad($maxid,8);
 $shuffled = str_shuffle($mtidno);
 echo  $shuffled;
4

2 に答える 2

5

まず、str_padそのように使用することで、「乱数」の途中に入る可能性のあるスペースを導入しています。

str_pad呼び出しを次のように変更します。

str_pad($maxid, 8, "0");

スペースを取り除くために。ただし、他の質問では、8 桁のランダムな数字を作成するためのより良い方法が提供されていることに注意してください。

次に、シャッフル0の結果が で始まると、それらはドロップオフします。

解決するには、データベースでa を使用できCHAR(8)ます。次に、先行ゼロが表示されます。

于 2013-03-14T13:05:12.577 に答える
1

7桁もあるなんて驚きです。パディングは単に右側にスペースを追加しませんか? rand 関数が 1 を返すとどうなりますか?

ランダム性という純粋な運だけで、7 桁と 8 桁を取得している可能性があります。しばらく試してみると、1 ~ 8 桁のすべての組み合わせが表示されるようになるはずです。

それに Bart が言ったことに加えて、先頭の 0 は単純に削除されます。

そういえば、ランドがあるなら、なぜシャッフルが必要なのですか? 以下で十分です。

srand ((double) microtime( )*1000000);
$maxid = rand(10000000,99999999);
echo $maxid; 

テスト コード (間違ったロジックを説明するため)

srand ((double) microtime( )*1000000);

for($i = 0; $i < 1000000; $i++)
{
    $maxid = rand(0,100000000);
    if($maxid < 100000){
        echo  $maxid . "<br>";
        $mtidno = str_pad($maxid,8);
        $shuffled = str_shuffle($mtidno);
        echo  $shuffled . "<br>";  
    }
}
echo "done <br>";

次の出力を参照してください。シャッフル後のスペースが明確に示されています。

0
0
12207
20 21 7
82397
78 329
64086
64086
42724
4 4 2 27
21362
216 32
57983
7 3 598
于 2013-03-14T13:20:05.883 に答える