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

WBOY
Lepaskan: 2016-06-13 12:08:39
asal
1200 orang telah melayarinya

求助!如何更快速的生成一个随机数!
需求是这样的:
会员购物,会生成一个定单号,这个定单号必须是数字,而且是在一定的范围之内的数据,如 1 到 10万。

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

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


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

这种方法行不通了。

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

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

希望你能理解

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!