ホームページ > php教程 > PHP开发 > PHPのuniqid関数を使用して一意のIDを生成する

PHPのuniqid関数を使用して一意のIDを生成する

高洛峰
リリース: 2016-12-28 15:32:22
オリジナル
2017 人が閲覧しました

一意の ID を生成するアプリケーション シナリオは、一時キャッシュ ファイル名、一時変数、一時セキュリティ コードなど、非常に一般的です。uniqid() 関数は、マイクロ秒単位の現在時刻に基づいて一意の ID を生成します。一意の ID の生成はマイクロ秒の時間に関連付けられているため、ID の一意性は非常に信頼できます。

生成された一意の ID によって返される文字列は、デフォルトでは 13 文字列の長さです。一意の ID のプレフィックスが定義されていない場合、md5() 関数と組み合わせると、最大 23 個の文字列長を返すことができます。この生成された ID の最大の利点は、特にデータベースに保存する必要がある一部の値についてソートできることです。

1. 関数プロトタイプ

string uniqid ( [string prefix [, bool more_entropy]] )
ログイン後にコピー

は、一意のIDのプレフィックスと長さを定義できます

2. 互換性のあるバージョン

PHP 4、PHP 5

3. 生成する関数一意の ID

<?php
echo uniqid();
?>
ログイン後にコピー

2、md5() 関数と組み合わせて一意の ID

<?php
echo md5(uniqid());
?>
ログイン後にコピー

出力: dfbc5c8c6438de075da28b3c8a413fd0

3、複数の一意の ID を生成マイクロ秒単位で測定

<?php
echo uniqid();
echo uniqid();
echo uniqid();
?>
ログイン後にコピー

出力:

4bfd0e375396b

4bfd0e3753981

4bfd0e3753983



生成された結果から判断すると、一意の ID は並べ替え可能です。
uniqid() 関数を使用して一意の ID を生成すると、一時的な ID と永続的な一意の ID (ストレージ データベース) の両方を生成できます。

ps: php で一意の ID を生成するためのいくつかの解決策

以下のエディターが 3 つの解決策をまとめました。具体的な内容は次のとおりです:

1, md5(time() . mt_rand(1,1000000));

このメソッドは一定の確率で繰り返されます

2. PHP組み込み関数uniqid()

uniqid()関数はマイクロ秒単位の現在時刻に基づいて一意のIDを生成します

という一文があります。 w3school リファレンス マニュアル: 「システム時間に基づいているため、この関数によって生成される ID は最適ではありません。完全に一意の ID を生成するには、md5() 関数を使用してください。」

次のメソッドは同様の結果を返します: 5DDB650F-4389-F4A9-A100-501EF1348872

function uuid() {
  if (function_exists ( &#39;com_create_guid&#39; )) {
    return com_create_guid ();
  } else {
    mt_srand ( ( double ) microtime () * 10000 ); //optional for php 4.2.0 and up.随便数播种,4.2.0以后不需要了。
    $charid = strtoupper ( md5 ( uniqid ( rand (), true ) ) ); //根据当前时间(微秒计)生成唯一id.
    $hyphen = chr ( 45 ); // "-"
    $uuid = &#39;&#39; . //chr(123)// "{"
substr ( $charid, 0, 8 ) . $hyphen . substr ( $charid, 8, 4 ) . $hyphen . substr ( $charid, 12, 4 ) . $hyphen . substr ( $charid, 16, 4 ) . $hyphen . substr ( $charid, 20, 12 );
    //.chr(125);// "}"
    return $uuid;
  }
}
ログイン後にコピー

com_create_guid() は、一意の ID を生成する PHP 独自のメソッドですが、PHP5 以降はなくなったようです。

3. 公式の uniqid() リファレンス マニュアルにはユーザーが提供したメソッドが含まれており、結果は同様です: {E2DFFFB3-571E-6CFC-4B5C-9FEDAAF2EFD7}

public function create_guid($namespace = &#39;&#39;) { 
  static $guid = &#39;&#39;;
  $uid = uniqid("", true);
  $data = $namespace;
  $data .= $_SERVER[&#39;REQUEST_TIME&#39;];
  $data .= $_SERVER[&#39;HTTP_USER_AGENT&#39;];
  $data .= $_SERVER[&#39;LOCAL_ADDR&#39;];
  $data .= $_SERVER[&#39;LOCAL_PORT&#39;];
  $data .= $_SERVER[&#39;REMOTE_ADDR&#39;];
  $data .= $_SERVER[&#39;REMOTE_PORT&#39;];
  $hash = strtoupper(hash(&#39;ripemd128&#39;, $uid . $guid . md5($data)));
  $guid = &#39;{&#39; .
      substr($hash, 0, 8) .
      &#39;-&#39; .
      substr($hash, 8, 4) .
      &#39;-&#39; .
      substr($hash, 12, 4) .
      &#39;-&#39; .
      substr($hash, 16, 4) .
      &#39;-&#39; .
      substr($hash, 20, 12) .
      &#39;}&#39;;
  return $guid;
 }
ログイン後にコピー

PHP uniqid の使用に関するその他の記事については、一意の ID を生成する関数については、PHP 中国語 Web サイトを参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート