基于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 分页原理分析,大家可以看看
Dec 21 PHP
php 如何获取数组第一个值
Aug 06 PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
Nov 16 PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
Laravel框架实现简单的学生信息管理平台案例
May 07 PHP
Laravel 登录后清空COOKIE的操作方法
Oct 14 PHP
laravel 使用事件系统统计浏览量的实现
Oct 16 PHP
laravel添加前台跳转成功页面示例
Oct 22 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
jQuery ready函数滥用分析
2011/02/16 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
javascript常用功能汇总
2015/07/05 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python如何读写csv数据
2018/03/21 Python
django-初始配置(纯手写)详解
2019/07/30 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
会计实习生自我鉴定
2013/12/12 职场文书
九月份红领巾广播稿
2014/01/22 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
2014最新离职证明范本
2014/09/12 职场文书
2016新年晚会开场白
2015/12/03 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL