$codeString = 'abcdefghizklmnopqrst123456790uvwxyz';
for($j=0;$j<=9;$j++)
{
$code .= $codeString[rand(0,34)];
}
echo $code;
我用上面的代码生成的$code存入数据库中,差不多存了1W多条的时候,生成的$code开始一直出现重复的值,每次生成都是重复的,我表示非常的不明白!清缓存都试了,求给位高手解惑!
for($j=0;$j<=9;$j++)
{
$code .= $codeString[rand(0,34)];
}
echo $code;
我用上面的代码生成的$code存入数据库中,差不多存了1W多条的时候,生成的$code开始一直出现重复的值,每次生成都是重复的,我表示非常的不明白!清缓存都试了,求给位高手解惑!
rand(1000000,9999999)呢?
比如说 第一次 出现 2 7 8 9 11 30 。。22 这几个合起来的
没多少数据后 它竟然还出现 2 7 8 9 11 30 。。22 这几个合起来的
什么原因呢?
不光php,目前所有语言都是这样的...
function randomkeys($length)
{
$pattern='1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';
for($i=0;$i<$length;$i++)
{
$key .= $pattern{mt_rand(0,35)}; //生成php随机数
}
return $key;
}
echo randomkeys(4);
?>
$codeString = 'abcdefghizklmnopqrst123456790uvwxyz';
//srand();
for($j=0;$j<=9;$j++)
{
srand();
$code .= $codeString[rand(0,34)];
}
echo $code;
谢谢楼上各位的答复,也进了10楼的帖子看了看。自己测试了下,疑问还是有!其实是自己还是没有清楚明白rand。
我在for循环里面加上个srand();这样子生成的数和以往生成的数不同了。(rand现在不是已经会自动播种了吗?)
若我在for循环外加上srand(),没有起到作用,生成的随机数还是会和以往相同。(通过这里我感觉是for循环里面的rand并没有自动播种?时间太短?)
还有就是mt_rand()现在是不是比rand()好。(速度快?不容易出未知错误?)
就如同它内部本身有一张预先设定好的表,在某种策略指定下,取出其中的数据。
如果不用srand来预先设定起始位置,很可能,程序每次运行时执行的第一个rand,都会得到相同的反馈结果。
手册中 注释:自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现在已自动完成。
如果不把rand放在for循环里 就没有问题。 放在for循环中,却要前面加个srand()。然道是因为在for循环中的rand并没有自动播种?用的都是第一个rand?因为for循环时间很短,所以用rand自己产生的种子其实还是一样的?但是为什么srand()在for里面就起了作用?
你PHP版本是多少?