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

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

高洛峰
高洛峰オリジナル
2016-12-28 15:32:221958ブラウズ

一意の 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 サイトを参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。