PHPのuniqid()関数の使い方

1417 ワード

この例では,PHPにおけるuniqid()関数の使い方について述べる.皆さんの参考にしてください.具体的な方法の分析は以下の通りである.
Uniqid()関数は、マイクロ秒で計算された現在の時間に基づいて、一意のIDを生成する.注記:システム時間に基づいているため、この関数によって生成されるIDは最適ではありません.絶対一意のIDを生成するには、md 5()関数を使用します(文字列関数リファレンスで検索してください).

    echo uniqid(); 
  
?>

この例では、32文字のユニークな文字列を生成します.

    $token = md5(uniqid(rand())); 
  
echo $token;
?>

 
Uniqid()は、接頭辞付きの一意の識別を返す、現在の時間に基づいてマイクロ秒まで正確である.
現在時間に基づいているというだけですが、現在時間との関係は説明されていません.
echo uniqid();uniqidは常に変化する長さ13の16進数であることがわかる.
次のコードを見てみましょう.

    echo hexdec(uniqid())/(time()+microtime()); 
  
?>

出力はほぼ1048576程度です.
uniqidは、現在の時間がマイクロ秒に正確になるまで1048576(2の20乗)を乗じて最後に16進法に変換されたものであると断定できる.uniqidとtimeの関係を知ると、uniqidはより広範な用途に使用できます.例えば、フォーラムでuniqidを投稿のファイル名として使用することができます.
投稿インデックスでは、簡単に時間通りに投稿を検索できます.
上下のコードを合わせると、重複しない32ビット文字を生成する役割を果たしていると思います.
Uniqid()関数自体はマイクロ秒で計算された現在の時間に基づいているので、高同時の場合は必ず重複する場合があります.解決策は、この前提で乱数を生成し、両者を結合して新しい数を生成することで、重複の確率を下げることができます.さらに精確にしたいのであればクライアントのIPのMd 5コードを加えて同じように生成することも可能であり,このように繰り返すべき確率は極めて低く,ほとんど繰り返さないといえる.

    function getRand(){ 
  
    return uniqid() . rand(1, 100000);
}
echo getRand();
exit;
?>

ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.