基于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的curl实现get和post的代码
Aug 23 PHP
php 字符过滤类,用于过滤各类用户输入的数据
May 27 PHP
详解PHP导入导出CSV文件
Nov 03 PHP
php中explode函数用法分析
Nov 15 PHP
php实现字符串首字母大写和单词首字母大写的方法
Mar 14 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
phpcms手机内容页面添加上一篇和下一篇
Jun 05 PHP
php判断表是否存在的方法
Jun 18 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
ThinkPHP中html:list标签用法分析
Jan 09 PHP
详解php中反射的应用
Mar 15 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
Oct 08 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的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
Vue中props的使用详解
2018/06/15 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python tornado使用流生成图片的例子
2019/11/18 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
办公室主任岗位职责
2013/11/08 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
mysql配置SSL证书登录的实现
2021/09/04 MySQL