由于基于系统时间,通过该函数生成的 ID 不是最佳的。如需生成绝对唯一的 ID,请使用 md5() 函数(请在字符串函数参考中查找)。有人推荐md5(uniqid(rand(),   true));这样用.如果uniqid不能保证绝对不重复, md5毫无作用啊? 因为md5依赖于输入, 和是否唯一无关啊.

解决方案 »

  1.   

    你的理解是对的. 手册上有这么一段注释, 看起来类似但是含义完全不同: (hmmm,这个中文版手册又滞后了,没有这段)This function does not generate cryptographically secure tokens, in fact without being passed any additional parameters the return value is little different from microtime(). If you need to generate cryptographically secure tokens use openssl_random_pseudo_bytes().
      

  2.   

    substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 6).''.mktime(date("Y-m-d H:i:s"));
    时间加随机数,基本上不会重复了。
      

  3.   

    可以通过$_GET[]获得需要加密的ID然后进行md5的加密也可以自己写个加密方法啊
      

  4.   


    这样是不可靠的,表面看随机数是不可能重复的,但是如果随机数的生成只与时间有关的话,那么同一个时刻,同样的随机算法,生成的随机数就是相同的,当然这种概率是很低的.一般唯一id都会加入一些唯一表示符,比如机器的GUID,就可以吧mac地址,cpu型号等硬件信息加入guid这样生成的就能保证跟其他任何一台机器产生的GUID不会重复.再比如如果要为每个用户生成一个唯一id的, 最好把用户ID信息放进来,这样可以保证每个用户生成的都是唯一的,而且同一个用户操作总是有先后的,也不可能生成重复的id.
      

  5.   

    如#7所解释的,最好是 md5(uniqid(session_id(), true)); 或者 md5(uniqid(user_id, true));