高並發 php uniqid 用md5生成不重復唯一標識符方案


高並發 php uniqid 用md5生成不重復唯一標識符方案
uniqid() 函數基於以微秒計的當前時間,生成一個唯一的 ID。
uniqid(prefix,more_entropy)
prefix 可選。為 ID 規定前綴。如果兩個腳本恰好在相同的微秒生成 ID,該參數很有用。
more_entropy 可選。規定位於返回值末尾的更多的熵。
如果 prefix 參數為空,則返回的字符串有 13 個字符串長。如果 more_entropy 參數設置為 true,則是 23 個字符串長。
如果 more_entropy 參數設置為 true,則在返回值的末尾添加額外的熵(使用組合線形同余數生成程序),這樣可以結果的唯一性更好。
以字符串的形式返回唯一標識符。
提示和注釋:由於基於系統時間,通過該函數生成的 ID 不是最佳的。即使使用了第二個參數,也會重復,如需生成絕對唯一的 ID最好的方案是結合md5函數來生成唯一ID。
-----------------------------------------

 1 //獲取唯一序列號
 2 public static function generateNum() {
 3     //strtoupper轉換成全大寫的
 4     $charid = strtoupper(md5(uniqid(mt_rand(), true)));
 5     $uuid = substr($charid, 0, 8).substr($charid, 8, 4).substr($charid,12, 4).substr($charid,16, 4).substr($charid,20,12);
 6     return $uuid;
 7 }
 8 
 9 --------------------------------------------
10 <?php
11     $units = array();
12     for($i=0;$i<1000000;$i++){
13         $units[] = md5(uniqid(md5(microtime(true)),true));
14     }
15     $values  = array_count_values($units);
16     $duplicates = [];
17     foreach($values as $k=>$v){
18         if($v>1){
19             $duplicates[$k]=$v;
20         }
21     }
22     //這種方法生成的唯一標識中沒有重復。
23     echo '<pre>';
24     print_r($duplicates);
25     echo '</pre>';
26 ?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM