如何生成6位数的唯一数字?我有适当的验证机制来检查重复的条目。
答案 0 :(得分:105)
$six_digit_random_number = mt_rand(100000, 999999);
当然,100,000到999,999之间的所有数字都是六位数。
答案 1 :(得分:33)
如果您希望从000001
开始,请转到999999
:
$num_str = sprintf("%06d", mt_rand(1, 999999));
请注意,它存储为字符串。
答案 2 :(得分:9)
另一个:
str_pad(mt_rand(0, 999999), 6, '0', STR_PAD_LEFT);
无论如何,为了保持唯一性,您必须检查您的电话号码是否尚未使用过。
您告诉您检查重复,但要小心,因为当使用大多数号码时,获取新号码的“尝试次数”(以及因此需要的时间)会增加,可能导致很长的延误和浪费CPU资源。
我建议,如果可能的话,跟踪数组中的可用ID,然后在可用的中随机选择一个ID ,通过这样做(如果ID列表保存在内存中) ):
$arrayOfAvailableIDs = array_map(function($nb) {
return str_pad($nb, 6, '0', STR_PAD_LEFT);
}, range(0, 999999));
$nbAvailableIDs = count($arrayOfAvailableIDs);
// pick a random ID
$newID = array_splice($arrayOfAvailableIDs, mt_rand(0, $nbAvailableIDs-1), 1);
$nbAvailableIDs--;
即使ID列表存储在数据库中,您也可以执行类似操作。
答案 3 :(得分:8)
<?php
$file = 'count.txt';
//get the number from the file
$uniq = file_get_contents($file);
//add +1
$id = $uniq + 1 ;
// add that new value to text file again for next use
file_put_contents($file, $id);
// your unique id ready
echo $id;
?>
我希望这会很好。我在我的网站上使用相同的技术。
答案 4 :(得分:4)
这是另一个:
substr(number_format(time() * rand(),0,'',''),0,6);
答案 5 :(得分:3)
这将生成随机的6位数字
<?php
mt_rand(100000,999999);
?>
答案 6 :(得分:2)
有一些很好的答案,但许多使用标记为加密不安全的函数。如果你想要一个加密安全的随机 6 位数字,你可以使用这样的东西:
$key = random_int(0, 9999999);
$key = str_pad($key, 6, 0, STR_PAD_LEFT);
return $key;
这还将包括诸如 000182 之类的数字,否则会被排除在其他示例之外。
答案 7 :(得分:1)
我会使用算法,暴力可以如下:
第一次循环: 生成介于100,000到999,999之间的随机数,并将其称为x1
第二次通过循环 生成一个介于100,000和x1之间的随机数,调用此xt2,然后在x1和999,999之间生成一个随机数,调用此xt3,然后随机选择x2或x3,调用此x2
第N次循环 生成100,000到x1,x1和x2以及x2到999,999之间的随机数等等......
注意端点,同时注意x1
答案 8 :(得分:1)
<?php echo rand(100000,999999); ?>
你可以生成随机数
答案 9 :(得分:1)
$characters = '123456789';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < 6; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
$pin=$randomString;
答案 10 :(得分:0)
在PHP 7.0+中,我建议在{em> random_int($min, $max)
上使用mt_rand()
。
$randomSixDigitInt = \random_int(100000, 999999);
答案 11 :(得分:0)
您可以使用 $ uniq = round(microtime(true));
它会按时间生成10位数字 永远不会被复制
答案 12 :(得分:0)
尝试使用 uniqid 和 hexdec,
echo hexdec(uniqid());
答案 13 :(得分:-1)
在此之前给出的答案中,the one by "Yes Barry" 是最合适的。
random_int(100000, 999999)
请注意,这里我们使用了 random_int
,它在 PHP 7 中引入并使用加密随机生成器,如果您希望随机代码难以猜测,这一点很重要。 random_bytes
也在 PHP 7 中引入,同样使用加密随机生成器。
随机值生成的许多其他解决方案,包括涉及time()
、microtime()
、uniqid()
、rand()
、mt_rand()
、str_shuffle()
、 array_rand()
和 shuffle()
更可预测,如果随机字符串将用作密码、不记名凭证、随机数、会话标识符、“验证码”或“确认码”,则不适合",或其他秘密值。
上面的代码生成了一个 6 位十进制数字的字符串。如果要使用更大的字符集(例如全部大写字母、全部小写字母和 10 位数字),这是一个更复杂的过程,但您必须使用 random_int
或 {{ 1}} 而不是 random_bytes
、rand()
、mt_rand()
等,如果该字符串将用作密码、“确认代码”或其他秘密值。请参阅 answer to a related question,另请参阅:generating a random code in php?
在生成唯一标识符(尤其是随机标识符)时,我还会列出 other things to keep in mind。