当前位置: 代码迷 >> PHP >> !怎么更快速的生成一个随机数
  详细解决方案

!怎么更快速的生成一个随机数

热度:52   发布时间:2016-04-28 18:22:24.0
求助!如何更快速的生成一个随机数!
需求是这样的:
会员购物,会生成一个定单号,这个定单号必须是数字,而且是在一定的范围之内的数据,如 1 到 10万。

我现在用的方法是 用  rand(1,100000),生成一个随机数,得到这个随机数后,再去数据库里查,如果已经存在这个数了,就循环再查。
代码如下:

         set_time_limit(0);
$test = M('test');
$_run = true;
$_order_id = rand(0, 100000);
while ($_run) {
$orderInfo = $test->where("val = ".$_order_id)->find();
if(empty($orderInfo)){
$_run = false;
return $_order_id;
}else{
$_order_id = rand(0, 100000);
}
}


这样做了,在定单号还很少的时候,很轻松的就取得了定单号,可假如当定单号已经达到了99990
这个时间,要生成其它的定单号就要很久了,几分钟甚至一个小时都有可能。

这种方法行不通了。

请朋友们帮想想办法,或提供下其它的思路,谢谢了!
------解决思路----------------------
可以自己写一个伪随机数发生器
先观察
$m = 100000;
$c = 101;
$b = 81;
$n = 0;
for($i=0; $i<100000; $i++) {
  $n = ($n * $c + $b) % $m;
  $r[] = $n;
}
print_r(array_count_values(array_count_values($r)));
Array
(
    [1] => 100000
)
可知 $r 中保有 0 - 99999 随机排列的数字,且每个数字只会出现一次

令 $n  为最后一次入库的号码,则 ($n * $c + $b) % $m 一定就不在库中

希望你能理解

  相关解决方案