4

我有以下代码,这些代码来自不同的教程示例:

<?php

$stamp = date("Ymdhis");
$random_id_length = 6;
$rndid = crypt(uniqid(rand(),1)); 
$rndid = strip_tags(stripslashes($rndid)); 
$rndid = str_replace(".","",$rndid); 
$rndid = strrev(str_replace("/","",$rndid));
$rndid = substr($rndid,0,$random_id_length); 
$orderid = "$stamp-$rndid";
$orderid = str_replace(".", "", "$orderid");
echo($orderid);

?>

小提琴: http ://phpfiddle.org/main/code/27d-qfw

我想用这个来创建一个数字;当前时间,后跟一个 6 位随机数。

例如:20130710045730-954762

然而,目前随机数字还包括字母。

例如:20130710045730-Z3sVN2

如何编辑代码以仅包含数字?任何帮助表示赞赏。

4

4 回答 4

29

uniqid()将已经返回数字。但是在他们的十六进制表示中。一般来说,您可以将它们转换为小数:

echo hexdec(uniqid());

该值只能在 64 位系统上观察到,因为它非常大并且超出了 32 位有符号整数的限制(如 php 的)。这就是重点。uniqid()将如此大的数字与其他技术一起使用以确保高度的唯一性。如果您只使用 6 位数字,则不能再授予此权限。价值观发生冲突的风险很高。

我建议使用数据库中的 auto_increment 值或类似的东西来生成应用程序范围的唯一性。

于 2013-07-10T17:17:31.150 回答
5

如果它是随机字符串,请使用以下内容:

$stamp = date("Ymdhis");
$random_id_length = 6;
$rndid = generateRandomString( $random_id_length );

$orderid = $stamp ."-". $rndid;
echo($orderid);

function generateRandomString($length = 10) {
  $characters = '0123456789';
  $randomString = '';
  for ($i = 0; $i < $length; $i++) {
    $randomString .= $characters[rand(0, strlen($characters) - 1)];
  }
  return $randomString;
}

// Output example: 20130710055714-462231

示例:http ://codepad.org/eukiOb6S

Fn 修改自https://stackoverflow.com/a/4356295/1265817

于 2013-07-10T17:58:23.503 回答
0

使用此代码。我认为这会有所帮助。

兰特(100000,999999)

输入你想要的两位数

于 2013-07-10T17:17:39.363 回答
-1

用这个:

str_pad(rand(0,'9'.round(microtime(true))),11, "0", STR_PAD_LEFT); 
于 2016-01-28T12:36:10.533 回答