background image

将输出 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);
}