基于php 随机数的深入理解


Posted in PHP onJune 05, 2013

php mt_srand 播下一个更好的随机数发生器种子
mt_srand
(PHP 3 >= 3.0.6, PHP 4, PHP 5)
mt_srand -- 播下一个更好的随机数发生器种子
说明

void mt_srand ( int seed )

用 seed 来给随机数发生器播种。从 PHP 4.2.0 版开始,seed 参数变为可选项,当该项为空时,会被设为随时数。
例子 1. mt_srand() 范例
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php
// seed with microseconds
function make_seed()
{
    list($usec, $sec) = explode(' ', microtime());
    return (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$randval = mt_rand();
?>

注: 自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现已自动完成。
参见 mt_rand(),mt_getrandmax() 和 srand()。
 
PHP mt_rand() 函数
定义和用法
mt_rand() 使用 Mersenne Twister 算法返回随机整数。
语法
mt_rand(min,max)

说明
如果没有提供可选参数 min 和 max,mt_rand() 返回 0 到 RAND_MAX 之间的伪随机数。例如想要 5 到 15(包括 5 和 15)之间的随机数,用 mt_rand(5, 15)。
很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。PHP 的 rand() 函数默认使用 libc 随机数发生器。mt_rand() 函数是非正式用来替换它的。该函数用了 Mersenne Twister 中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。
提示和注释
注释:自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现在已自动完成。
注释:在 3.0.7 之前的版本中,max 的含义是 range 。要在这些版本中得到和上例相同 5 到 15 的随机数,简短的例子是 mt_rand (5, 11)。
例子
在本例中,我们会返回一些随机数:
<?phpecho(mt_rand());
echo(mt_rand());
echo(mt_rand(10,100));
?>

输出类似:
3150906288
513289678
35  
注意:上面这个函数给出的随机整数,数字之外的字符是不会出来的,若想其他字符产生,就需另自定义方法,如下所示:
<?php
/*
 * $length:随机数字符串的长度
 * $type:产生随机数的类型
 * */
function random($length, $type = "") {
    $chars = !$type ? "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz" : "0123456789abcdef";
    $max = strlen($chars) - 1;
    mt_srand((double)microtime() * 1000000);
    for($i = 0; $i < $length; $i++) {
        $string .= $chars[mt_rand(0, $max)];
    }
    return $string;
}
$var=random(32,'haha');
echo($var);
?>

输出:
fe61e294e5f46437cb3a92b92643ead6
PHP 相关文章推荐
PHP中一个控制字符串输出的函数
Oct 09 PHP
优化PHP代码的53条建议
Mar 27 PHP
不要轻信 PHP_SELF的安全问题
Sep 05 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
php strrpos()与strripos()函数
Aug 31 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
Zend Framework教程之视图组件Zend_View用法详解
Mar 05 PHP
全面了解PHP中的全局变量
Jun 17 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
PHP实现数组和对象的相互转换操作示例
Mar 20 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 #PHP
PHP中__get()和__set()的用法实例详解
Jun 04 #PHP
深入PHP运行环境配置的详解
Jun 04 #PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 #PHP
如何设置mysql允许外网访问
Jun 04 #PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 #PHP
PHP多线程批量采集下载美女图片的实现代码(续)
Jun 03 #PHP
You might like
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
2009/09/09 PHP
教你php如何实现验证码
2016/01/20 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
深入理解Node module模块
2018/03/26 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
python使用chardet判断字符串编码的方法
2015/03/13 Python
Python 装饰器深入理解
2017/03/16 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
学生会主席竞聘书
2014/03/31 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
2014年共青团工作总结
2014/12/10 职场文书
教师工作表现自我评价
2015/03/05 职场文书
八年级语文教学反思
2016/03/03 职场文书