Home  >  Article  >  Backend Development  >  How to achieve non-duplicate unique values ​​in php

How to achieve non-duplicate unique values ​​in php

藏色散人
藏色散人Original
2022-11-03 09:59:081225browse

php method to achieve non-duplicate unique values: 1. You can use the "uniqid()" function to generate a non-duplicate unique identifier; 2. You can use the "session_create_id()" function to generate a unique identifier; 3. Unique identifiers can be generated using the "session_create_id()" function.

How to achieve non-duplicate unique values ​​in php

The operating environment of this tutorial: Windows 7 system, PHP version 8.1, Dell G3 computer.

How to achieve non-duplicate unique values ​​in php?

PHP Generates a unique unique identifier session_create_id()

PHP uniqid() function can be used to generate a unique unique identifier that is based on the microsecond level current timestamp. In cases of high concurrency or extremely short intervals (such as loop code), a large amount of duplicate data will appear. This is repeated even if the second parameter is used.

Use the session_create_id() function to generate a unique identifier. After actual testing, it was found that even if session_create_id() is called cyclically 100 million times, there is no duplication.

php session_create_id() is a new function in PHP 7.1. It is used to generate session id. It cannot be used in lower versions.

PHP uniqid() function can be used to generate a unique identifier that is not repeated, which is based on the current timestamp in microseconds. In cases of high concurrency or extremely short intervals (such as loop code), a large amount of duplicate data will appear. This is repeated even if the second parameter is used.

Use the session_create_id() function to generate a unique identifier. After actual testing, it was found that even if session_create_id() is called cyclically 100 million times, there is no duplication.

php session_create_id() is a new function in PHP 7.1. It is used to generate session id. It cannot be used in lower versions.

<?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;;
}

Recommended learning: "PHP Video Tutorial"

The above is the detailed content of How to achieve non-duplicate unique values ​​in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn