PHP:生成唯一字符串

时间:2012-06-14 06:42:52

标签: php string

  

可能重复:
  PHP: How to generate a random, unique, alphanumeric string?

我正在尝试生成唯一ID(字母数字字符串)。我正在使用当前的时间戳。我有两个问题:

  1. 如果md5(stamp1),则md5(stamp2)stamp1 != stamp2不同。
  2. 是否有一种生成唯一字符串的常用方法?
  3. PS:最简单的原因是将邮票作为ID。我仍然不想要很容易找出如何生成id

3 个答案:

答案 0 :(得分:10)

  1. 是的,在大多数情况下,它们会有所不同。哈希冲突的可能性非常非常低(想想数十亿之一)。

  2. 内置函数uniqid()非常适用于此。您甚至可以md5(uniqid()),但请注意,这不会增加GUID的熵。为了增加熵,您可以调用这样的函数:uniqid('',TRUE);

答案 1 :(得分:3)

使用散列函数永远不会真正独一无二,但你可以将另一个更接近的字符串放在一起,即获取他们的IP地址并附加请求microtime,如下所示:

$strUnique = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR'])) . floor(microtime(true) * 1000);

为了不是唯一的,两个访问者必须以完全相同的微秒从相同的IP地址加载页面,这比两个哈希值相等更不可能。

答案 2 :(得分:2)

我完全同意xbonez的回答,但我想补充一点,这取决于你使用它的原因还有一些其他注意事项。

  • 如果这是针对数据库ID,您通常可以依靠数据库系统的自动增量或其他唯一键功能来生成id
  • 如果是文件名,则使用tempnam代替
  • 您可能希望同时使用md5中的时间戳和随机数,因为可以想象多个用户可以在同一时间戳上点击该页面