基于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 相关文章推荐
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
php选择排序法实现数组排序实例分析
Feb 16 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
Sep 22 PHP
php set_include_path函数设置 include_path 配置选项
Oct 30 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 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 array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
ASP SQL防注入的方法
2008/12/25 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
jquery延迟对象解析
2016/10/26 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
matplotlib作图添加表格实例代码
2018/01/23 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
大学生军训感想
2014/02/16 职场文书
仓库管理计划书
2014/05/04 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
校园安全学习心得体会
2016/01/18 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers
Python利用FlashText算法实现替换字符串
2022/03/31 Python