随机函数应用的场景很多,比如验证码,token,订单号等。由浅入深了解常用随机函数
1.rand
常用的随机数字函数,默认生成[0,getrandmax()]之间的随机数(包括边界值),因性能问题已被mt_rand替换。
相关函数:rand(int $min, int $max)生成$min和$max之间的数。
srand(int $seed) 生成时间种子,同一个时间种子下随机生成的随机值相同。
getrandmax() 获取最大随机数(随系统不同而不同)。
使用场景:见mt_rand
2.mt_rand
常用随机函数,默认生成[0,mt_getrandmax()]之间的随机函数(包括边界值).
相关函数:mt_rand(int $min, int $max)生成$min和$max之间的数。
mt_srand(int $seed) 生成时间种子,同一个时间种子下随机生成的随机值相同。
mt_getrandmax() 获取最大随机数(随系统不同而不同)。
使用场景:生成验证码mt_rand(1000, 9999);
生成订单号date('YmdHis').str_pad(mt_rand(1,99999), 5, '0', STR_PAD_LEFT);
3.uniqid
生成唯一ID的函数,精确到了微妙,较mt_rand精确。
相关函数:uniqid([string $prefix = "" [, bool $more_entropy = false ]]) 前缀可用在多个脚本生成ID重复问题,正常返回13位,加密后返回23位
使用场景:生成token md5(uniqid())
生成uuid
function guid(){
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*);//optional for php 4.2. and up.
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr();// "-"
$uuid = chr()// "{"
.substr($charid, , ).$hyphen
.substr($charid, , ).$hyphen
.substr($charid,, ).$hyphen
.substr($charid,, ).$hyphen
.substr($charid,,)
.chr();// "}"
return $uuid;
}
}
echo guid();
4.openssl_random_pseudo_bytes
使用场景:生成token
public static function getRandomString($length = 42)
{
/*
* Use OpenSSL (if available)
*/
if (function_exists('openssl_random_pseudo_bytes')) {
$bytes = openssl_random_pseudo_bytes($length * 2);
if ($bytes === false)
throw new RuntimeException('Unable to generate a random string');
return substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $length);
}
$pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
return substr(str_shuffle(str_repeat($pool, 5)), 0, $length);
}
5.linux下
head /dev/urandom | tr -dc a-z0-9 | head -c 20
【转】随机函数的rand、srand用法
from:深海的小鱼儿 地址:http://www.cnblogs.com/xmphoenix/archive/2011/04/07/2008622.html 随机函数的rand.srand用法 一& ...
c语言随机函数&;&;时间函数
c语言中的随机函数为rand(),但是rand生成的值得大小主要相对一个变量才产生的一定有含义的数,这个相对的变量我们可以再srand()函数中进行设置,srand函数是void类型,内部含一个无符号 ...
JAVA上百实例源码以及开源项目
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...
转:随机函数 C++中rand()函数的用法
转自:http://blog.163.com/wujiaxing009@126/blog/static/719883992011113011359154/ 一.C++中不能使用random()函数 ...
easy ui 异步上传文件,跨域
easy ui 跨域上传文件,代码如下: 1.html代码:(这段代码是个win窗体,我在点击上传图片按钮然后弹出一个上传图片的窗体,选择图片再进行上传,这样在form提交时,提交的参数会少一点.) ...
随机函数Surprising
之前写了个用来抽取1-54号的随机函数,发现30-40出现的情况很大,就在果壳上提问了一下//听取了某个大神的建议循环了10000次之后惊喜的发现这样写出现了一大堆相同的数字! 之后有个很神大牛解答了 ...
从零开始学安全(四十)●上传文件MIME类型绕过漏洞防御
MIME检测原理 服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法的. php示例代码: if($_FILES['userfile']['type' ...
随机函数rand()和srand()
C++中随机函数rand()和srand()的用法 一.rand() 函数名: rand 功 能: 随机数发生器 用 法: int rand(void); 所在头文件: ...
第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传
第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传 实现原理 前台用cropper插件,将用户上传头像时裁剪图片的坐标和图片,传到逻辑处理 ...
随机推荐
Send to Kindle :一键推送网页内容到多看
http://site.douban.com/129629/widget/notes/7074800/note/207072907/ 注意:增加配置信息,一键发送,方便及时分享网页.
XML的特殊字符处理
XML中共有5个特殊的字符,分别是:&<>“’.如果配置文件中的注入值包括这些特殊字符,就需要进行特别处理.有两种解决方法:其一,采用本例中的 ...
Git CMD - rm: Remove files from the working tree and from the index
命令格式 git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] … 命令参 ...
zabbix邮件告警
Zabbix邮件告警看了很多文档,写的那叫一个蛋疼,明明没有发出去邮件,硬要糊弄观众,我也跟着被糊弄. 操作系统环境: CentOS 5.5 x84_64位 Zabbix版本2.2.3 Web服务器: ...
【日语】secret base
君(きみ)と夏(なつ)の终(お)わり 将来(しょうらい)の梦(ゆめ)Kimi to natsu no owari shourai no yume大(おお)きな希望(きぼう) 忘(わす)れないOoki ...
手机开机提示SD卡受损
手机开机提示SD卡受损,手机不显示内存卡,有人会选择换新卡或者格式化内存卡,如果刚好木有备份,内存卡上的珍藏丢失了多心痛啊.其实,我们可以通过电脑救活提示受损的内存卡,前后不超过5分钟... 方法:1 ...
关于联想笔记本ThinkPad E470 没有外音 插耳机却有声音的解决办法
碰到这种情况,小编和大家一样选择设备管理器,找到声卡驱动卸载重新装,结果很失望,选择驱动精灵/联想驱动重装声卡,结果很绝望.并没有解决问题. 最后小编参考了一篇文章找到了解决办法 到联想官方网站服务界 ...
Linux修改用户所在组方法
Linux修改用户所在组方法 usermod -g 用户组 用户名强行设置某个用户所在组usermod -G 用户组 用户名把某个用户改为 group(s) usermod -a -G 用户组 用户名 ...
[转] @JoinColumn 详解 (javax.persistence.JoinColumn)
原文链接:@JoinColumn详解 原文标的也是转载,但是没有注明原文链接,看起来乱乱的,所以整理一下转载过来,顺便细看一下 1. 一对一 现假设有Person表和Address表,是一对一的关系 ...