参考函数:
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,低版本无法使用。
网友评论