高并发 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。

//获取唯一序列号
public static function generateNum() {
    //strtoupper转换成全大写的
    $charid = strtoupper(md5(uniqid(mt_rand(), true)));
    $uuid = substr($charid, 0, 8).substr($charid, 8, 4).substr($charid,12, 4).substr($charid,16, 4).substr($charid,20,12);
    return $uuid;
}
--------------------------------------------
<?php
    $units = array();
    for($i=0;$i<1000000;$i++){
        $units[] = md5(uniqid(md5(microtime(true)),true));
    }
    $values  = array_count_values($units);
    $duplicates = [];
    foreach($values as $k=>$v){
        if($v>1){
            $duplicates[$k]=$v;
        }
    }
    //这种方法生成的唯一标识中没有重复。
    echo '<pre>';
    print_r($duplicates);
    echo '</pre>';
?>


修改时间 2016-08-28

真诚赞赏,手留余香
赞赏
随机推荐
PDO 使用预处理 LIMIT
javascript延迟操作setInterval
API Rate Limiting 限速
CentOS 7 中,Apache 2.4 的 mod_evasive 无法正常工作,不能屏蔽IP
jQuery自定义函数
JavaScript 代码保护技术 混淆和加密
PS手绘20171016
使用 linear-gradient 创建渐变背景色的背景
Javascript去字符串前后空格5种实现方法及比较
vim 教程