2

これを使用して、文字列プールからランダムな文字を取得しています:

$charset=str_shuffle('./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789');
$charsetLength=strlen($charset)-1;
$chosen=$charset[rand(0,$charsetLength)];

rand および str_shuffle 関数は、疑似乱数の結果を生成します。

ランダムな文字を取得するより良い方法はありますか

4

3 に答える 3

2

短い答え: いいえ、まったく問題ありません。

長い答え:

(疑似) ランダム文字列を本当に生成する必要がある場合は、mcrypt拡張機能を調べて で使用mcrypt_create_iv()でき/dev/urandomます。バイナリで生成されたシードをそのまま使用するか、base64 に変換して ascii 表現を取得できます。

実際の乱数を生成する方法はないことに注意してください。エントロピーを増やすだけでかまいません。しかし、ほとんどの場合、それで十分です...

于 2012-06-18T17:55:35.420 に答える
1
  • 文字列をシャッフルしてランダムなインデックスを選択する必要はありません。この方法では、追加のランダム性は得られません。
  • ほとんどすべての目的で、rand()問題なく動作し、問題が発生することはありません。mt_rand()ソムナスが示唆するように、あなたが本当にそれを容認できないなら、それはより良いことです.
  • または、 HotBitsRandom.orgなどのサービスを使用すると、真にランダムな値にアクセスできますが、速度や要求が制限されます。繰り返しますが、これはほぼ確実に必要ではありません。
于 2012-06-18T17:58:04.500 に答える
-1

を使用してmt_rand()

次の方法で、ランダムな文字のインデックスを取得できます。

$charIndex = mt_rand(0, strlen($string));
$char = $string[$charIndex]; // or substr($string, $charIndex, 1)

古い libcs​​ の多くの乱数ジェネレーターは、疑わしいまたは未知の特性を持ち、低速です。デフォルトでは、PHP は libc 乱数ジェネレーターと rand() 関数を使用します。mt_rand() 関数は、これを簡単に置き換えるものです。» Mersenne Twister を使用して既知の特性を持つ乱数ジェネレーターを使用します。これは、平均的な libc rand() が提供するよりも 4 倍高速に乱数を生成します。

オプションの min、max 引数なしで呼び出された場合、mt_rand() は 0 と mt_getrandmax() の間の疑似乱数値を返します。たとえば、5 から 15 までの乱数が必要な場合は、mt_rand(5, 15) を使用します。

また、str_shuffle も必要ありません。mt_rand は乱数間のシャッフルを行います。

ソース:

  1. 与えられた文字列からランダムに文字を選択するメソッド
  2. http://maymay.net/blog/2004/12/19/generating-random-letters-in-php/
于 2012-06-18T17:53:00.280 に答える