求助!如何更快速的生成一个随机数! $_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); 如何限制php对某个目录的写权限? 请问没有安装web服务器如何运行php程序? 请教一下怎么去掉数值的千分位分隔符 求一正则表达式,据说题目要长.。。。。。 如何在点击提交按钮时候执行以下语句?新手求救 程序该怎么写 怎样实现在页面上的一个按钮,使它具有保存当前页面的路径到收藏夹中的操作 PHP與普通的區別在那裡? 哪里能下到有这样酷界面的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
)
可知这十万个数是不重复的