重複の可能性:
PHP:ランダムで一意の英数字の文字列を生成する方法は?
一意のID(英数字の文字列)を生成しようとしています。そのために現在のタイムスタンプを使用しています。2つの質問があります:
- if
md5(stamp1)とは異なります。md5(stamp2)stamp1 != stamp2 - 一意の文字列を生成する一般的な方法はありますか?
PS:原因の最も簡単な方法は、IDとしてスタンプを取ることです。それでも、idがどのように生成されるかを簡単に見つけることができたくありません
重複の可能性:
PHP:ランダムで一意の英数字の文字列を生成する方法は?
一意のID(英数字の文字列)を生成しようとしています。そのために現在のタイムスタンプを使用しています。2つの質問があります:
md5(stamp1)とは異なります。md5(stamp2)stamp1 != stamp2PS:原因の最も簡単な方法は、IDとしてスタンプを取ることです。それでも、idがどのように生成されるかを簡単に見つけることができたくありません
はい、ほとんどの場合、それらは異なります。ハッシュ衝突の可能性は非常に低いです (10 億分の 1 と考えてください)。
組み込み関数uniqid()はこれに最適です。することもできますが、これは GUID のエントロピーを増加させないmd5(uniqid())ことに注意してください。エントロピーを増やすには、次のように関数を呼び出すことができます。uniqid('',TRUE);
ハッシュ関数の使用は真に一意になることはありませんが、次のように、IPアドレスを取得してリクエストのマイクロタイムを追加するなど、はるかに近い別の文字列をまとめることができます。
$strUnique = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR'])) . floor(microtime(true) * 1000);
これが一意でないためには、2人の訪問者がまったく同じマイクロ秒で同じIPアドレスからページをロードする必要があります。これは、2つのハッシュが等しい場合よりも可能性が低いです。
xbonezの回答には完全に同意しますが、使用目的に応じて、他にいくつかの考慮事項があることを追加したいと思います。