php生成随机密码的几种方法


Posted in PHP onJanuary 17, 2011

随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法,以供大家参考。

方法一:

     1、在 33 ? 126 中生成一个随机整数,如 35,
     2、将 35 转换成对应的ASCII码字符,如 35 对应 #
     3、重复以上 1、2 步骤 n 次,连接成 n 位的密码

     该算法主要用到了两个函数,mt_rand ( int $min , int $max )函数用于生成随机整数,其中 $min ? $max 为 ASCII 码的范围,这里取 33 -126 ,可以根据需要调整范围,如ASCII码表中 97 ? 122 位对应 a ? z 的英文字母,具体可参考 ASCII码表; chr ( int $ascii )函数用于将对应整数 $ascii 转换成对应的字符。

function create_password($pw_length = 8) 
{ 
$randpwd = ''; 
for ($i = 0; $i < $pw_length; $i++) 
{ 
$randpwd .= chr(mt_rand(33, 126)); 
} 
return $randpwd; 
} // 调用该函数,传递长度参数$pw_length = 6 
echo create_password(6);

方法二:
1、预置一个的字符串 $chars ,包括 a ? z,A ? Z,0 ? 9,以及一些特殊字符
2、在 $chars 字符串中随机取一个字符
3、重复第二步 n 次,可得长度为 n 的密码
function generate_password( $length = 8 ) { 
// 密码字符集,可任意添加你需要的字符 
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|'; $password = ''; 
for ( $i = 0; $i < $length; $i++ ) 
{ 
// 这里提供两种字符获取方式 
// 第一种是使用 substr 截取$chars中的任意一位字符; 
// 第二种是取字符数组 $chars 的任意元素 
// $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); 
$password .= $chars[ mt_rand(0, strlen($chars) - 1) ]; 
} 
return $password; 
}

方法三:

     1、预置一个的字符数组 $chars ,包括 a ? z,A ? Z,0 ? 9,以及一些特殊字符
     2、通过array_rand()从数组 $chars 中随机选出 $length 个元素
     3、根据已获取的键名数组 $keys,从数组 $chars 取出字符拼接字符串。该方法的缺点是相同的字符不会重复取。

function make_password( $length = 8 ) 
{ 
// 密码字符集,可任意添加你需要的字符 
$chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 
'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's', 
't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D', 
'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z', 
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', 
'@','#', '$', '%', '^', '&', '*', '(', ')', '-', '_', 
'[', ']', '{', '}', '<', '>', '~', '`', '+', '=', ',', 
'.', ';', ':', '/', '?', '|'); // 在 $chars 中随机取 $length 个数组元素键名 
$keys = array_rand($chars, $length); 
$password = ''; 
for($i = 0; $i < $length; $i++) 
{ 
// 将 $length 个数组元素连接成字符串 
$password .= $chars[$keys[$i]]; 
} 
return $password; 
}

方法四:
本方法是本文被蓝色理想转载后,一名网友提供的一个新方法,算法简单,代码简短,只是因为md5()函数的返回值的缘故,生成的密码只包括字母和数字,不过也算是一个不错的方法。算法思想:
1、time() 获取当前的 Unix 时间戳
2、将第一步获取的时间戳进行 md5() 加密
3、将第二步加密的结果,截取 n 位即得想要的密码
function get_password( $length = 8 ) 
{ 
$str = substr(md5(time()), 0, 6); 
return $str; 
}

时间效率对比
我们使用以下PHP代码,计算上面的 4 个随机密码生成函数生成 6 位密码的运行时间,进而对他们的时间效率进行一个简单的对比。
<?php 
function getmicrotime() 
{ 
list($usec, $sec) = explode(" ",microtime()); 
return ((float)$usec + (float)$sec); 
} // 记录开始时间 
$time_start = getmicrotime(); 
// 这里放要执行的PHP代码,如: 
// echo create_password(6); 
// 记录结束时间 
$time_end = getmicrotime(); 
$time = $time_end - $time_start; 
// 输出运行总时间 
echo "执行时间 $time seconds"; 
?>

最终得出的结果是:
方法一:9.8943710327148E-5 秒
方法二:9.6797943115234E-5 秒
方法三:0.00017499923706055 秒
方法四:3.4093856811523E-5 秒

可以看出方法一和方法二的执行时间都差不多,方法四运行时间最短,而方法三的运行时间稍微长点。

PHP 相关文章推荐
php 获取本机外网/公网IP的代码
May 09 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
PHP数据过滤的方法
Oct 30 PHP
php实现插入排序
Mar 29 PHP
关于PHP开发的9条建议
Jul 27 PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 PHP
学习php设计模式 php实现状态模式
Dec 07 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 PHP
PHP单例模式简单用法示例
Jun 23 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
PHP校验ISBN码的函数代码
Jan 17 #PHP
PHP中用正则表达式清除字符串的空白
Jan 17 #PHP
php开发环境配置记录
Jan 14 #PHP
PHP文件读写操作之文件写入代码
Jan 13 #PHP
PHP文件读写操作之文件读取方法详解
Jan 13 #PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 #PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 #PHP
You might like
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
任意位置显示html菜单
2007/02/01 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
python3 mmh3安装及使用方法
2019/10/09 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
Python中格式化字符串的四种实现
2020/05/26 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
我们的节日国庆活动方案
2014/08/19 职场文书
关于安全的广播稿
2014/10/23 职场文书
2014年党总支工作总结
2014/12/18 职场文书
2015年考研复习计划
2015/01/19 职场文书
单位证明范文
2015/06/18 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书