求助!如何更快速的生成一个随机数! $_order_id = date('YmdHis') . rand(100000,999999);//这样的订单号应该不会有重复的,又方便,前面还能看出时间来 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 需求要求,非要在1-10万之间的数那你还是用原子性的redis自增吧 需求要求,非要在1-10万之间的数那你还是用原子性的redis自增吧我没有描述清楚,补充下吧,定单号要在1-10万之间。 定单号不能 递增或递减的生成,一定要随机的,只要在1-10万之间随机,如果随机的过程中产生连号不用处理 可以自己写一个伪随机数发生器先观察$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 一定就不在库中希望你能理解 先查询没有使用的订单号总量,然后随机数最大值就设它,随到多少,你就limit多少 线性同余法 线性同余方法是目前应用广泛的伪随机数生成算法,其基本思想是通过对前一个数进行线性运算并取模从而得到下一个数。即:a(i+1)=(a(i)*b+c)mod(m)其中b称为乘数,c称为增量,m称为模数,它们均为常数。乘数、增量和模数的选取可以多种多样,只要保证产生的随机数有较好的均匀性和随机性即可。线性同余法的最大周期是m,但一般情况下会小于m。要使周期达到最大,应该满足以下条件:(1) c和m互质;(2) m的所有质因子的积能整除b-1;(3) 若m是4的倍数,则b-1也是;(4) b,c,a(0)(初值,一般即种子)都比m小;(5) b,c是正整数。经过耐心的筛选,可以找到使绝对均匀的b和carray_count_values(array_count_values($r)) 中array_count_values($r) 得到一个数组,保存有$r中每个值出现的次数再次统计得Array( [1] => 100000)可知这十万个数是不重复的 $_order_id = date('YmdHis') . rand(1000,9999); E+14 超大整数的mysql存储问题 怎么从XML中取出最大值 麻烦管理员帮忙删一个帖子,不胜感谢 问个入门级的问题 Mysql数据库编码与表编码有什么区别啊? plchart入门 关于SESSION的一个很傻的问题 高分PHP与Mysql问题 急!!!马上给分 郁闷!!php总是无法和MYSQL连接!还是我写错了? 大家帮忙看一个问题啊! Eclipse Php环境搭建问题 linux php
需求要求,非要在1-10万之间的数那你还是用原子性的redis自增吧
需求要求,非要在1-10万之间的数那你还是用原子性的redis自增吧我没有描述清楚,补充下吧,定单号要在1-10万之间。 定单号不能 递增或递减的生成,一定要随机的,只要在1-10万之间随机,如果随机的过程中产生连号不用处理
先观察$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 一定就不在库中希望你能理解
a(i+1)=(a(i)*b+c)mod(m)
其中b称为乘数,c称为增量,m称为模数,它们均为常数。乘数、增量和模数的选取可以多种多样,只要保证产生的随机数有较好的均匀性和随机性即可。
线性同余法的最大周期是m,但一般情况下会小于m。要使周期达到最大,应该满足以下条件:
(1) c和m互质;
(2) m的所有质因子的积能整除b-1;
(3) 若m是4的倍数,则b-1也是;
(4) b,c,a(0)(初值,一般即种子)都比m小;
(5) b,c是正整数。经过耐心的筛选,可以找到使绝对均匀的b和carray_count_values(array_count_values($r)) 中
array_count_values($r) 得到一个数组,保存有$r中每个值出现的次数
再次统计得
Array
(
[1] => 100000
)
可知这十万个数是不重复的