Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何生成6位唯一数字?_Php_Random - Fatal编程技术网

Php 如何生成6位唯一数字?

Php 如何生成6位唯一数字?,php,random,Php,Random,如何生成6位唯一数字?我有适当的验证机制来检查重复条目 $six_digit_random_number = random_int(100000, 999999); 当然,100000和999999之间的所有数字都是六位数。如果您希望它从000001开始,然后转到999999: $num_str = sprintf("%06d", mt_rand(1, 999999)); 请注意,它存储为字符串。另一个: str_pad(mt_rand(0, 999999), 6, '0', STR_PAD

如何生成6位唯一数字?我有适当的验证机制来检查重复条目

$six_digit_random_number = random_int(100000, 999999);

当然,100000和999999之间的所有数字都是六位数。

如果您希望它从
000001
开始,然后转到
999999

$num_str = sprintf("%06d", mt_rand(1, 999999));
请注意,它存储为字符串。

另一个:

str_pad(mt_rand(0, 999999), 6, '0', STR_PAD_LEFT);
substr(number_format(time() * rand(),0,'',''),0,6);
无论如何,为了唯一性,您必须检查您的号码是否已被使用

您告诉检查重复的,但要小心,因为当使用大多数数字时,获取新数字的“尝试次数”(以及所花费的时间)会增加,可能会导致很长的延迟和CPU资源的浪费

我建议,如果可能的话,跟踪数组中的可用ID,然后在可用ID中随机选择一个ID,方法如下(如果内存中保留了ID列表):


即使ID列表存储在数据库中,您也可以执行类似操作。

我将使用一种算法,暴力可以如下所示:

首次通过循环: 生成一个介于100000到999999之间的随机数,并调用该x1

第二次通过循环 生成100000和x1之间的随机数调用此xt2,然后生成x1和999999之间的随机数调用此xt3,然后随机选择x2或x3,调用此x2

第n次通过循环 生成100000和x1、x1和x2以及x2到999999之间的随机数,依此类推

注意端点,也要注意x1这是另一个:

str_pad(mt_rand(0, 999999), 6, '0', STR_PAD_LEFT);
substr(number_format(time() * rand(),0,'',''),0,6);


我希望这会很好。我在我的网站上使用相同的技术。

这将生成随机的6位数

您可以生成随机数

$characters='123456789';
$characters = '123456789';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < 6; $i++) {
    $randomString .= $characters[rand(0, $charactersLength - 1)];
}
$pin=$randomString; 
$charactersLength=strlen($characters); $randomString=''; 对于($i=0;$i<6;$i++){ $randomString.=$characters[rand(0,$charactersLength-1)]; } $pin=$randomString;
在PHP7.0+中,我建议
随机整数($min,$max)
超过
mt\u rand()

从php.net:

谨慎 此函数不生成加密安全值,不应用于加密目的。如果需要加密的安全值,请考虑使用RealthyIn()、RealthyByTeSe()、或OpenSSLIVRAPIONPIDOOYBYTESE()来代替。 所以这主要取决于上下文。我还要补充一点,从PHP7.1.0开始,
rand()
现在是
mt\u rand()
的别名


干杯

您可以使用$uniq=round(microtime(true))

它根据时间生成10位数字
这是永远不会被复制的

尝试使用uniqid和hexdec

echo hexdec(uniqid());

在此之前给出的答案中,有一个是最合适的

random_int(100000, 999999)
请注意,这里我们使用的是
random\u int
,它是在PHP7中引入的,并使用加密随机生成器,如果您希望随机代码难以猜测,这一点很重要random_bytes,同样使用加密随机生成器

许多其他随机值生成解决方案,包括涉及
time()
microtime()
uniqid()
rand()
mt\u rand()
stru shuffle()
array\u rand()
,以及
shuffle(),如果随机字符串将用作密码、承载凭证、nonce、会话标识符、“验证码”或“确认码”或另一个秘密值,则更具可预测性且不合适

上面的代码生成一个由6位十进制数字组成的字符串。如果您想使用更大的字符集(例如所有大写字母、所有小写字母和10位数字),这是一个更复杂的过程,但您必须使用
random\u int
random\u bytes
而不是
rand()
mt\u rand()
str\u shuffle()
等。,如果字符串将用作密码、“确认码”或其他机密值。请参见,另请参见:


我还列出了生成唯一标识符的时间,尤其是随机标识符的时间。

有一些很好的答案,但许多使用的函数被标记为不加密安全。如果您想要一个加密安全的随机6位数字,您可以使用如下内容:

$key = random_int(0, 9999999);
$key = str_pad($key, 6, 0, STR_PAD_LEFT);
return $key;

这还将包括000182等数字以及其他可能从其他示例中排除的数字。

如果是这样,为什么不使用序列号呢?或者使用时间戳?可能是重复的,你知道这个方法生成了多少个随机数吗?如果得到相同的随机数呢?@salemahmed。不,真的,数字很可能重复,但仍然是随机的。这很好。其他解决方案(Tim Cooper和Frosty Z)更好,因为它们也生成1到100000之间的数字。@SamuelLindblom虽然这是真的,但这些数字是用左边的零生成的,这可能会导致奇怪和副作用,包括被误解为八进制数的可能性。通过保留100000作为底部数字,您可以确保它始终被视为预期数字。这些类型的6位代码通常用于安全目的。因此,值得注意的是,在MTYRAND DOCS中,它建议不使用它来达到这些目的,“警告该函数不生成加密的安全值,不应该用于加密目的。如果需要加密的安全值,请考虑使用RealthyIn()、RealthyByTeSe)或OpenSSLRead伪随机字节()。相反,“这是随机的(
mt_rand
)还是顺序的(从*开始到*)?你的答案和@Charles在2011年3月28日提供的答案有什么区别?没有区别:)@TrixAs这个问题已经问了6年了,不知道这会给已经发布的答案增加多少。为什么?你不应该
$key = random_int(0, 9999999);
$key = str_pad($key, 6, 0, STR_PAD_LEFT);
return $key;