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 相关文章推荐
DOMXML函数笔记
Oct 09 PHP
网络资源
Oct 09 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
Apr 10 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
PHP5.5和之前的版本empty函数的不同之处
Jun 13 PHP
个人写的PHP验证码生成类分享
Aug 21 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
分享五个PHP7性能优化提升技巧
Dec 07 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 PHP
php通过header发送自定义数据方法
Jan 18 PHP
php使用Swoole实现毫秒级定时任务的方法
Sep 04 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
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
python matlibplot绘制3D图形
2018/07/02 Python
Python使用folium excel绘制point
2019/01/03 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
django框架创建应用操作示例
2019/09/26 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
python中str内置函数用法总结
2020/12/27 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
中专毕业生个人职业生涯规划
2014/02/19 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
2014年科室工作总结
2014/11/20 职场文书
家长对孩子的寄语
2015/02/26 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS