解决方案 »

  1.   

    我想,你应该补习一下相关的数学知识了!内层 28
    外层 10000
    总计 280000
    6个数字的集合从 000000 到 999999
    所以只有顺序从该集合中抽取 280000 个元素,才不可能出现重复(当然集合中元素的位置是可以打乱的) php 的伪随机数发生器的周期是 32768
    也就是说 32768 次之后必然出现重复
    等何况你需求的总量比伪随机数周期的高出一个数量级,这必然会出现重复的所以你需要自己写一个伪随机数发生器来突破这个周期限制
    比如define('RAND_MAX', pow(2, 27));
    function my_rand() {
      static $r = 0;
      if($r == 0) $r = time();//以当前时间做种子
      $r = ($r * 123 + 59) % RAND_MAX;
      if($r < 0) $r += RAND_MAX;
      return $r;
    }
    测试for($i=0; $i<1000000; $i++) {
      $c = my_rand();
      @$t[$c]++;//对每个数出现的次数进行计数,多于 1 就是重复了
    }
    print_r(array_count_values($t));//统计数组中出现的相同值的次数结果
    Array
    (
        [1] => 1000000
    )
    表示没有出现重复pow(2, 27) 等于 134217728
    表示相同的种子在 134217728 次中不会出现重复