基于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一些常用的正则表达式字符的一些转换
Jul 29 PHP
PHP Array交叉表实现代码
Aug 05 PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 PHP
MySQL 日期时间函数常用总结
Jun 12 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 PHP
eAccelerator的安装与使用详解
Jun 13 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
PHP使用递归生成文章树
Apr 21 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
Feb 18 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 GD 图像处理组件的常用函数总结
2010/04/28 PHP
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
jquery随意添加移除html的实现代码
2011/06/21 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
浅谈Vue.js
2017/03/02 Javascript
详解VUE 数组更新
2017/12/16 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
python集合删除多种方法详解
2020/02/10 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
Django多数据库联用实现方法解析
2020/11/12 Python
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
草船借箭教学反思
2014/02/03 职场文书
餐厅经理岗位职责范本
2014/02/17 职场文书
信息学院毕业生自荐信范文
2014/03/04 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
检讨书范文
2015/01/27 职场文书
廉政承诺书2015
2015/04/28 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书