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

WBOY
Freigeben: 2016-06-13 12:08:39
Original
1198 Leute haben es durchsucht

求助!如何更快速的生成一个随机数!
需求是这样的:
会员购物,会生成一个定单号,这个定单号必须是数字,而且是在一定的范围之内的数据,如 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 />
Nach dem Login kopieren


这样做了,在定单号还很少的时候,很轻松的就取得了定单号,可假如当定单号已经达到了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 />
Nach dem Login kopieren
Array<br />(<br />    [1] => 100000<br />)<br />
Nach dem Login kopieren
可知 $r 中保有 0 - 99999 随机排列的数字,且每个数字只会出现一次

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

希望你能理解

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!