这个函数会使strSerial始终是唯一的吗?

时间:2013-06-14 17:53:03

标签: php sql-server

此函数是否会使某个项目的strSerial始终唯一,或者只获取日期时间,如果有人同时执行该脚本,它们将同时strSerial

  $x = explode(' ', microtime());
  $nSerialLo = ($x[0] . date('s') . date('i') + date('H')) . rand(0, 1024);
  $nSerialHi = (date('d') . date('m') . (date('Y') % 100)) . rand(0, 1024);
  $nSerial = $pEquipped->ToUInt64($nSerialHi, $nSerialLo);
  $pItem->SetNum($nItemID)->SetSerial($nSerial)->SetDurability($nDurability)->SetCount(1);

2 个答案:

答案 0 :(得分:0)

这些是你的变量:

  $nSerialLo = ($x[0] . date('s') . date('i') + date('H')) . rand(0, 1024);
  $nSerialHi = (date('d') . date('m') . (date('Y') % 100)) . rand(0, 1024);
echo  $nSerialLo."<br>";
echo $nSerialHi."<br>";

它的回归:

4930701
140613904

我添加了microtime:

$date_micro= date("YmdHis").substr((string)microtime(), 1, 6);
$removedote=explode('.',$date_micro); 
$new_date= $removedote[0].$removedote[1];
echo $new_date."<br>";

它的回归:

2013061415154969409

使用microtime,我认为它将是一个唯一的数字

编辑:

现在呢?

$x = explode(' ', microtime());
  $y = explode(' ', microtime());
  $new_val=$y[0] * $x[0];
  $nSerialLo = ($new_val . date('s') . date('i') + date('H')) * rand(0, 1024);
  $z = explode('.', $nSerialLo);
  $nSerialHi = ($z[1] .$x[0] . (idate('U') % $x[1])) . rand(0, 1024);
  echo  $nSerialLo."<br>";
  echo $nSerialHi."<br>";

答案 1 :(得分:0)

您可以像这样添加微秒:

$nSerialLo = ($x[0] . date('u') . date('s') . date('i') + date('H')) . rand(0, 1024);

但是,这并不保证您不会与序列号发生冲突,因此我建议您将序列号存储在数据库中并检查它是否是之前创建的。