Maison >développement back-end >Problème PHP >Comment obtenir des valeurs uniques non dupliquées en php

Comment obtenir des valeurs uniques non dupliquées en php

藏色散人
藏色散人original
2022-11-03 09:59:081254parcourir

Comment implémenter des valeurs uniques non répétitives en PHP : 1. Vous pouvez utiliser la fonction "uniqid()" pour générer un identifiant unique non répétitif ; 2. Vous pouvez utiliser la fonction "session_create_id()" pour générer ; un identifiant unique; 3. Vous pouvez utiliser la fonction "session_create_id ()" pour générer un identifiant unique.

Comment obtenir des valeurs uniques non dupliquées en php

L'environnement d'exploitation de ce tutoriel : système Windows 7, PHP version 8.1, ordinateur Dell G3.

Comment obtenir des valeurs uniques non dupliquées en php ?

PHP génère un identifiant unique unique session_create_id()

La fonction PHP uniqid() peut être utilisée pour générer un identifiant unique unique basé sur l'horodatage actuel au niveau de la microseconde. En cas de concurrence élevée ou d'intervalles extrêmement courts (comme le code de boucle), une grande quantité de données en double apparaîtra. Ceci est répété même si le deuxième paramètre est utilisé.

Utilisez la fonction session_create_id() pour générer un identifiant unique. Après des tests réels, il a été constaté que même si session_create_id() était appelée de manière cyclique 100 millions de fois, il n'y avait pas de duplication.

php session_create_id() est une nouvelle fonction de PHP 7.1. Elle est utilisée pour générer un identifiant de session. Elle ne peut pas être utilisée dans les versions inférieures.

La fonction PHP uniqid() peut être utilisée pour générer un identifiant unique non dupliqué basé sur l'horodatage actuel en microsecondes. En cas de concurrence élevée ou d'intervalles extrêmement courts (comme le code de boucle), une grande quantité de données en double apparaîtra. Ceci est répété même si le deuxième paramètre est utilisé.

Utilisez la fonction session_create_id() pour générer un identifiant unique. Après des tests réels, il a été constaté que même si session_create_id() était appelée de manière cyclique 100 millions de fois, il n'y avait pas de duplication.

php session_create_id() est une nouvelle fonction de PHP 7.1. Elle est utilisée pour générer un identifiant de session. Elle ne peut pas être utilisée dans les versions inférieures.

<?php
/**
 * PHP生成唯一RequestID类
 * Version: 1.0
 */
class RequestID{ // class start
 
    /**
    * 生成唯一请求id
    * session_create_id 需要php7.1以上版本
    * @return String
    */
    public static function generateV7(){
        // 使用session_create_id()方法创建前缀
        $prefix = session_create_id(date(&#39;YmdHis&#39;));
        // 使用uniqid()方法创建唯一id
        $request_id = strtoupper(md5(uniqid($prefix, true)));
        // 格式化请求id
        return self::format($request_id);
    }
 
    public static function generate(){
        // 创建前缀
        $prefix = self::create_guid(date(&#39;YmdHis&#39;));
        // 使用uniqid()方法创建唯一id
        $request_id = strtoupper(md5(uniqid($prefix, true)));
        // 格式化请求id
        return self::format($request_id);
    }
 
    public static 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 .= isset($_SERVER[&#39;LOCAL_ADDR&#39;])?$_SERVER[&#39;LOCAL_ADDR&#39;]:$_SERVER[&#39;SERVER_ADDR&#39;];
        $data .= isset($_SERVER[&#39;LOCAL_PORT&#39;])?$_SERVER[&#39;LOCAL_PORT&#39;]:$_SERVER[&#39;SERVER_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;
    }
 
    /**
    * 格式化请求id
    * @param String $request_id 请求id
    * @param Array $format  格式
    * @return String
    */
    private static function format($request_id, $format=&#39;8,4,4,4,12&#39;){
        $tmp = array();
        $offset = 0;
        $cut = explode(&#39;,&#39;, $format);
        // 根据设定格式化
        if($cut){
            foreach($cut as $v){
                $tmp[] = substr($request_id, $offset, $v);
                $offset += $v;
            }
        }
        // 加入剩余部分
        if($offset<strlen($request_id)){
            $tmp[] = substr($request_id, $offset);
        }
        return implode(&#39;-&#39;, $tmp);
    }
} // class end
 
// 生成10个请求id
for($i=0; $i<10; $i++){
 echo RequestID::generate().PHP_EOL.&#39;<br>&#39;;
}

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn