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

时间:2011-03-28 20:50:50

标签: php random

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

14 个答案:

答案 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_bytesrand()mt_rand() 等,如果该字符串将用作密码、“确认代码”或其他秘密值。请参阅 answer to a related question,另请参阅:generating a random code in php?

在生成唯一标识符(尤其是随机标识符)时,我还会列出 other things to keep in mind