可能重复:
PHP:如何生成随机、唯一的字母数字字符串?
我正在尝试生成唯一 ID(字母数字字符串)。我为此使用了当前时间戳。我有两个问题:
- 将
md5(stamp1)
不同于md5(stamp2)
ifstamp1 != stamp2
。 - 有没有一种通用的方法来生成唯一的字符串?
PS:最简单的原因就是以stamp为id。我仍然不希望很容易找出 id 是如何生成的
可能重复:
PHP:如何生成随机、唯一的字母数字字符串?
我正在尝试生成唯一 ID(字母数字字符串)。我为此使用了当前时间戳。我有两个问题:
md5(stamp1)
不同于md5(stamp2)
if stamp1 != stamp2
。PS:最简单的原因就是以stamp为id。我仍然不希望很容易找出 id 是如何生成的
是的,在大多数情况下,它们会有所不同。哈希冲突的可能性非常非常低(想想十亿分之一)。
内置功能uniqid()
对此非常有用。您甚至可以这样做md5(uniqid())
,但请注意,这不会增加 GUID 的熵。为了增加熵,您可以像这样调用函数:uniqid('',TRUE);
使用散列函数永远不会真正唯一,但您可以将另一个更接近的字符串组合在一起,即获取它们的 IP 地址并附加请求微时间,如下所示:
$strUnique = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR'])) . floor(microtime(true) * 1000);
为了使这不是唯一的,两个访问者必须在完全相同的微秒内从相同的 IP 地址加载页面,这比两个哈希相等的可能性更小。
我完全同意 xbonez 的回答,但我想补充一点,这取决于您使用它的用途,因为还有其他一些考虑因素。