我正在尝试提出一种解决方案,以便在飞行中生成唯一ID。使用范围可以是订单,产品或计划ID,其中不涉及安全性。
我不喜欢生成随机数,然后查询数据库以检查其唯一性并重复该过程,如果不是安全性不是问题的话。
此外,我不喜欢使用自动增量ID,因为它看起来很简单。
我最初的想法是使用自动增量id +时间戳的组合将十进制值转换为十六进制,使其看起来像一个随机字符串。然后最后用2位随机字符串作为前缀和后缀。
function generateUID($num){
$str = dechex(time()+ intval($num));
$prefix = dechex(rand(1,15));
$suffix = dechex(rand(1,15));
return strtoupper($suffix.$str.$prefix);
}
其中$ num是auto_increment id
返回类似E53D42A046
这是否是正确的方法,是否存在碰撞问题?
我感谢所有回复..!
我承认uniqid()的用处,但在这种情况下,真正独特的Auto_Increment需要发挥重要作用,因此它将如何在uniqid中这样做。将其作为前缀传递将导致产品ID的大小变化很大。 (153d432da861fe,999999953d432f439bc0)。
为了进一步扩展范围,理想情况下我们需要一个唯一的代码,看起来随机,长度相当一致,并且可以反转为创建它的auto_increment id。
答案 0 :(得分:2)
这样的功能已经存在 - uniqid()
http://php.net/manual/en/function.uniqid.php
它基于时间戳到微秒工作 - 您可以根据进程ID添加前缀以进一步优化它。还有一些更强大的版本 - 请参阅PHP function to generate v4 UUID