欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-04 14:54:12
...
求助!如何更快速的生成一个随机数!
需求是这样的:
会员购物,会生成一个定单号,这个定单号必须是数字,而且是在一定的范围之内的数据,如 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 $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 一定就不在库中

希望你能理解

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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频