基于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 27 PHP
php命名空间学习详解
Feb 27 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
Sep 29 PHP
php输出xml必须header的解决方法
Oct 17 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
ThinkPHP3.2.3实现分页的方法详解
Jun 03 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
yii2多图上传组件的使用教程
May 10 PHP
PHP使用HTML5 FormData对象提交表单操作示例
Jul 02 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获取文件扩展名的4种方法
2015/11/24 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
半角全角相互转换的js函数
2009/10/16 Javascript
javascript Demo模态窗口
2009/12/06 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
详解javascript函数的参数
2015/11/10 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
python字符串连接方式汇总
2014/08/21 Python
Python的另外几种语言实现
2015/01/29 Python
Python数据类型详解(一)字符串
2016/05/08 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
Delphi笔试题
2016/11/14 面试题
物流管理毕业生自荐信范文
2014/03/15 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
个人先进事迹总结
2015/02/26 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
一文简单了解MySQL前缀索引
2022/04/03 MySQL
解决MySQL报“too many connections“错误
2022/04/19 MySQL
app场景下uniapp的扫码记录
2022/07/23 Java/Android