Generatinge Unique Id在飞行中Mysql + PHP

时间:2014-07-26 22:23:28

标签: php mysql random

我正在尝试提出一种解决方案,以便在飞行中生成唯一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。

1 个答案:

答案 0 :(得分:2)

这样的功能已经存在 - uniqid()

http://php.net/manual/en/function.uniqid.php

它基于时间戳到微秒工作 - 您可以根据进程ID添加前缀以进一步优化它。还有一些更强大的版本 - 请参阅PHP function to generate v4 UUID