如何制作“uniqid”只给出数字?

时间:2013-07-10 17:10:01

标签: php

我有以下代码,我从不同的教程示例中汇总了这些代码:

<?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);

?>

FIDDLE:http://phpfiddle.org/main/code/27d-qfw

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

例如:20130710045730-954762

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

例如:20130710045730-Z3sVN2

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

4 个答案:

答案 0 :(得分:21)

uniqid()已经返回了数字。但在他们的十六进制表示。通常,您可以将它们转换为小数:

echo hexdec(uniqid());

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

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

答案 1 :(得分:4)

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

$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

修改

答案 2 :(得分:0)

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

兰特(100000,999999)

输入您想要的两个数字

答案 3 :(得分:-1)

使用此:

str_pad(rand(0,'9'.round(microtime(true))),11, "0", STR_PAD_LEFT);