如何写一个生成唯一id的方法

搜了一下,有一下方法

md5(time() . mt_rand(1,1000000));

md5(uniqid());

还有其它好的方法吗?

六月的风
Junwind
讨论数量: 13

雪花算法,自己搜一下

2年前 评论

uuid和雪花算法,目前做分布式id的这两个比较多,不过我个人还是倾向于md5

2年前 评论
陈先生

一般来说雪花是最好的,具体可以参考 hyperf/snowflake, 不过基础场景 date('Ymd') . time() . microtime() . Str::random(random_int()) 就足够用了。

2年前 评论
Evilk 2年前
renxiaotu 2年前
陈先生 (作者) 2年前
sanders

好不容易获得了一点唯一性,全被md5毁了 :joy:

2年前 评论
sanders

我个人觉得还不如用直接用 microtime()

2年前 评论
Junwind (楼主) 2年前
$uniqid = substr(uniqid(), 5, 13);
$random = str_pad(random_int(0, 9999), 4, '0', STR_PAD_LEFT);
echo sprintf('%s%s%s', date('YmdHis'), $random, $uniqid);
2年前 评论

php 内置了 ,非要简单的问题复杂化

uniqid('',true)

// or 

random_bytes(n)
2年前 评论

我们有用到的一个

intval(microtime(true) * 10000) . (getmypid() % 10) . sprintf('%04d', rand(0, 9999));

gitee.com/modstart/ModStartCMS/blo...

2年前 评论
return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT) . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!