将输出 23 位字符串。
代码如下:
<?php
var_dump(uniqid());
var_dump(uniqid("a"));
?>
输出结果为:
代码如下:
string(13) "51734aa562254" string(14) "a51734aa562257"
优点:13 位字符串长度,是可以接受的文件命名长度;可以添加前缀,结果包含数据混
淆,能够避免反推原始数据。
缺点:同 md5 相似,高并发,以秒为种子数据,仍然会出现重复现象。
三、升级版方案:
1,fast_uuid:返回 17 位数字。
有点像 uniqid()
“
”
的不完全定制版,这个函数里面出现的 种子数开始时间 概念很有启发
性。
time() 和 uniqid() 中 默 认 用 到 的 时 间 都 是 从 1970 年 开 始 计 算 的 , 长 度 有 十 位
(1366512439
“
”
),采用 种子数开始时间 能够缩小这个数值,因为我们实际上需要的,
仅仅是一个能够自动增长的数值即可。
起始时间自定义以后,除了减少长度,还能够起到混淆的作用。
代码如下:
/*
*
参数 suffix_len
指定 生成的 ID
值附加多少位随机数,默认值为 3。
*
“
感谢 Ivan Tan|
谭俊青 DrinChing (at) Gmail.com”提供的算法。
* @param int suffix_len
* @return string
*/
function fast_uuid($suffix_len=3){
//! 计算种子数的开始时间
$being_timestamp = strtotime('2013-3-21');
$time = explode(' ', microtime());
$id = ($time[1] - $being_timestamp) . sprintf('%06u', substr($time[0], 2, 6));
if ($suffix_len > 0)
{
$id .= substr(sprintf('%010u', mt_rand()), 0, $suffix_len);
}