php 生成一个唯一 ID mark

想到生成唯一的ID 第一反应就是系统默认的uniqid 函数
开发手册
但是uniqid 也是会有出现重复的现象 不相信可以自己动手实验一下

uniqid重复

看到如此你可能想到时间戳+随机数? 不可否认 这种方法也是可以实现唯一的 下面贴出小明的方法 支持生成字段长度的控制,本地测试200W次没有出现重复现象(200w后就没有测试了,测试可能不符合国际标准?)

没有什么技术含量 如果有不对之处请指出。

小明的uniqid

1
2
3
4
5
6
7
8
function rand_mark($num=8,$data=array()) {
$data[]=md5(uniqid().mt_rand(1000,9999));
$data[]=substr($data['0'],mt_rand(0,32-$num),$num);
$data[]=substr($data['0'],mt_rand(0,32-$num),$num);
$data[]=substr($data['0'],mt_rand(0,32-$num),$num);
$data[]=substr($data['0'],mt_rand(0,32-$num),$num);
return $data[rand(1,4)];
}

2019-04-12更新

​ 突然想起来之前写过这么一个函数,真是太年轻了。其实可以用microtime()微妙函数,在一定程度上解决高并发的问题。之前写的“可能”没有什么问题,但是在性能上是不可取的。