【发布时间】:2011-03-09 14:06:46
【问题描述】:
我想在 PHP 中生成一个随机数,其中数字本身不应在该数字中重复。 那可能吗? 您可以在此处粘贴示例代码吗? 例如:674930、145289。[即不应出现相同的数字] 谢谢
【问题讨论】:
-
如果你这样做,数字不会是随机的,因为你会干扰进程。
我想在 PHP 中生成一个随机数,其中数字本身不应在该数字中重复。 那可能吗? 您可以在此处粘贴示例代码吗? 例如:674930、145289。[即不应出现相同的数字] 谢谢
【问题讨论】:
<?php
function genRandomString() {
$length = 10; // set length of string
$characters = '0123456789'; // for undefined string
$string ="";
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(0, strlen($characters))];
}
return $string;
}
$s = genRandomString(); //this is your random print var
or
function rand_string( $length )
{
$chars = "0123456789";
$size = strlen( $chars );
for( $i = 0; $i < $length; $i++ )
{
$str .= $chars[ rand( 0, $size – 1 ) ];
}
return $str;
}
$rid= rand_string( 6 ); // 6 means length of generate string
?>
【讨论】:
我看到的类似这样的最少代码是:
function random_num($n=5)
{
return rand(0, pow(10, $n));
}
但我假设它需要比其他方法更多的处理。
【讨论】:
function randomize($len = false)
{
$ints = array();
$len = $len ? $len : rand(2,9);
if($len > 9)
{
trigger_error('Maximum length should not exceed 9');
return 0;
}
while(true)
{
$current = rand(0,9);
if(!in_array($current,$ints))
{
$ints[] = $current;
}
if(count($ints) == $len)
{
return implode($ints);
}
}
}
echo randomize(); //Numbers that are all unique with a random length.
echo randomize(7); //Numbers that are all unique with a length of 7
应该这样做
【讨论】:
$result= "";
$numbers= "0123456789";
$length = 8;
$i = 0;
while ($i < $length)
{
$char = substr($numbers, mt_rand(0, strlen($numbers)-1), 1);
//prevents duplicates
if (!strstr($result, $char))
{
$result .= $char;
$i++;
}
}
这应该可以解决问题。在 $numbers 中你可以放任何你想要的字符,例如:我用它来生成随机密码、产品代码等。
【讨论】:
这是一个很好的方法:
$amountOfDigits = 6;
$numbers = range(0,9);
shuffle($numbers);
for($i = 0;$i < $amountOfDigits;$i++)
$digits .= $numbers[$i];
echo $digits; //prints 217356
如果你想要一个简洁的函数,你可以创建这样的东西:
function randomDigits($length){
$numbers = range(0,9);
shuffle($numbers);
for($i = 0;$i < $length;$i++)
$digits .= $numbers[$i];
return $digits;
}
【讨论】: