我可以使用strtotime(';now';)作为PHP中的唯一ID吗


can I use strtotime('now') as unique ID in PHP?

我可以在php应用程序中使用strtotime("now")作为唯一ID吗?因为我认为它使用当前时间戳,将来无法生成相同的整数?

使用strtotime('now')作为id 是不安全的

看看这个代码:

$now = strtotime('now');
$anotherNow = strtotime('now');
$sameCounter = 0;
while($anotherNow == $now){
    $sameCounter++;
    $anotherNow = strtotime('now');
}
echo $sameCounter; //8558

结果是8558,非常不安全,php在那一秒执行了8558次操作
很有可能会多次获得相同的ID。

您可以使用uniq函数来代替

Uniq id本身就是一个php函数,您可以拥有这样的

$uniq = uniqid();

你可以在这个中添加更多的熵

我们很少有机会获得重复项,您可以在用户名前加前缀像这样的echo"$username-".time();或"$username".time();或"$userid-".time();

在php中已经有了uniqid

uniqid()函数根据微时间生成一个唯一的ID(当前时间以微秒为单位)。

欲了解更多信息,请访问官方网站http://php.net/manual/en/function.uniqid.php

不,不要那样做。尽管时间戳可能总是不同的,但这并不意味着它是唯一的。例如,如果同时发出两个请求,会发生什么情况?您将有两个相等的时间戳。在选择唯一ID时,必须确保不存在等于值的可能情况。一个好的解决方案是拥有一个自动递增字段。这将确保你的身份证永远不会相同。

我用于小型项目,比如迷你博客或cms。该函数使用unix时间生成10位数字并且每秒钟都在更改,如果你的项目不是biq,并且没有得到很高的请求或插入,你可以安全地使用它。

$UniqID = time();

它创建了10位数字的ID,如(1462570078)

对于其他项目,我使用microtime而不是time()或其他类似的uniq

$m=microtime(true);
echo sprintf("%8x%05x'n",floor($m),($m-floor($m))*10000);