我想在PHP中生成随机数代码而不重复,并且有16个长度。 最好的方法是什么? 我使用这段代码:
$possible = '0123456789';
$code = '';
$i = 0;
while ($i < 14) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
echo($code);
但那产生了一个随机数。我想要30000个随机数。我该怎么办?
我也使用此代码,但这不会生成16个长度:
<?php
$con=mysqli_connect("localhost","root","","test1");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysql_connect_error();
}
for ($s=0;$s<10;$s++) {
$possible = '0123456789';
$code = '';
$i = 0;
while ($i < 16) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
echo($code);
echo nl2br("$code <br/>");
mysqli_query($con,"INSERT INTO test (ID, Code, Type, Used)
VALUES ('', '".$code."','1', '0')");
}
for ($s=0;$s<10;$s++) {
$possible = '0123456789';
$code = '';
$i = 0;
while ($i < 16) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
echo($code);
echo nl2br("$code <br/>");
mysqli_query($con,"INSERT INTO test (ID, Code, Type, Used)
VALUES ('', '".$code."','2', '0')");
}
for ($s=0;$s<10;$s++) {
$possible = '0123456789';
$code = '';
$i = 0;
while ($i < 16) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
echo($code);
echo nl2br("$code <br/>");
mysqli_query($con,"INSERT INTO test (ID, Code, Type, Used)
VALUES ('', '".$code."','3', '0')");
}
mysqli_close($con);
?>
答案 0 :(得分:3)
可以简单地使用rand(pow(10,13),pow(10,14)-1)
生成一个随机的14位数字 - PHP可以处理最多2 51 -1的整数值,因为它会静默地将它们转换为双精度浮点数如果他们变得太大了。
答案 1 :(得分:1)
无重复数字的片段:
$len=14;
$last=-1;
for ($i=0;$i<$len;$i++)
{
do
{
$next_digit=mt_rand(0,9);
}
while ($next_digit == $last);
$last=$next_digit;
$code.=$next_digit;
}
在30000内没有重复的片段(但允许重复数字):
$codes=array();
while (count($codes) < 30000)
{
$code=rand(pow(10,13),pow(10,14)-1);
$codes["$code"]=1;
}
代码存储为数组的键(只是为了节省一些内存)。
对于这个问题可能有更好的解决方案(尤其是效率更高的问题) - 但这个问题非常简短;-) - 由于Kolink解决方案的集成。
希望它有所帮助。
*斯特