实战技术

PHP生成不重复随机字符的思路

2021-08-08  本文已影响0人  elileo

参考函数:

uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID,高并发情况下会重复。
microtime() 返回当前 Unix 时间戳和微秒数,有重复概率。
random_int()php7添加了更好的随机数random_int()用来代替php5的mt_rand()
session_create_id()函数生成唯一标识符,经测试即使循环调用session_create_id()一亿次,都不会出现过重复字符。

方法一 较短的随机字符(22个字符)

uniqid()microtime(),几乎不可能重复。

        //我的破笔记本跑100万次都没有重复
        $strTF = '';
        for ($i=0;$i<1000000;$i++){
            $str = str_replace('0.','',explode(' ',microtime())[0]);
            $strnow = uniqid().$str;
            if ($strTF==$strnow) {
                echo $strnow;
            }
            $strTF = $strnow;
            echo '<br>';
        }

其中str_replace('0.','',explode(' ',microtime())[0]) 可得到8个字符的毫秒数字,如果用random_int(1000,9999)替代,可以再节约4个字符。

方法二 较长的随机字符(27个字符)

使用session_create_id()函数生成唯一标识符,经过实际测试发现,即使循环调用session_create_id()一亿次,都没有出现过重复。 php session_create_id()是php 7.1版本新增的函数,用来生成session id,低版本无法使用。

上一篇下一篇

猜你喜欢

热点阅读