$codeString = 'abcdefghizklmnopqrst123456790uvwxyz';
        for($j=0;$j<=9;$j++)
        {
            $code .= $codeString[rand(0,34)];
        }
        echo $code;
我用上面的代码生成的$code存入数据库中,差不多存了1W多条的时候,生成的$code开始一直出现重复的值,每次生成都是重复的,我表示非常的不明白!清缓存都试了,求给位高手解惑!

解决方案 »

  1.   

    然道rand(0,34)有个循环周期,每过一段时间 随机的值顺序都是一样的?不明白呀不明白
      

  2.   

    rand 就是随机,就算他一开始就重复 你也得认命了
      

  3.   

    单单试了下rand(0,34),又没问题!到底什么原因呢!!!!
      

  4.   

    $codeString是字符串,但$codeString[rand(0,34)]是个什么意思?
    rand(1000000,9999999)呢?
      

  5.   

    我循环9次 rand(0,34) 它竟然合起来后跟以前出现的一样的?太不理解了
    比如说 第一次 出现  2 7 8 9 11 30 。。22 这几个合起来的
    没多少数据后 它竟然还出现 2 7 8 9 11 30 。。22 这几个合起来的 
    什么原因呢?
      

  6.   

    rand是伪随机数,如果想要尽可能的接近真实随机,需要seed哦...
    不光php,目前所有语言都是这样的...
      

  7.   

    <?php
    function randomkeys($length)
    {
     $pattern='1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';
     for($i=0;$i<$length;$i++)
     {
       $key .= $pattern{mt_rand(0,35)};    //生成php随机数
     }
     return $key;
    }
     echo randomkeys(4);
    ?>
      

  8.   

    http://topic.csdn.net/u/20090817/20/883a5a2d-5a73-4705-8e68-3c512495eb8c.html
      

  9.   

    <?php
     $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()好。(速度快?不容易出未知错误?)     
      

  10.   

    其实,计算机里,不存在真正的随机数,都是伪随机的。
    就如同它内部本身有一张预先设定好的表,在某种策略指定下,取出其中的数据。
    如果不用srand来预先设定起始位置,很可能,程序每次运行时执行的第一个rand,都会得到相同的反馈结果。
      

  11.   

    但是现在rand不是已经自动播种了吗?
    手册中 注释:自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现在已自动完成。
    如果不把rand放在for循环里 就没有问题。 放在for循环中,却要前面加个srand()。然道是因为在for循环中的rand并没有自动播种?用的都是第一个rand?因为for循环时间很短,所以用rand自己产生的种子其实还是一样的?但是为什么srand()在for里面就起了作用?
      

  12.   

    貌似是这样?可能是rand自动播放种子依靠的是时间,但在for循环里时间几乎一样,所以种子并无变化,而srand()播放种子用得时随时数?(这个随时数在N短时间内也是不一样的?)所以加个srand()即可成功?
      

  13.   

    Note: As of PHP 4.2.0, there is no need to seed the random number generator with srand() or mt_srand() as this is now done automatically. 
    你PHP版本是多少?