php生成随机密码的三种方法小结


Posted in PHP onSeptember 04, 2010

使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码。随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法,以供大家参考。

方法一

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 = ($chars, $length); 
$password = ''; 
for($i = 0; $i < $length; $i++) 
{ 
// 将 $length 个数组元素连接成字符串 
$password .= $chars[$keys[$i]]; 
} 
return $password; 
}

时间效率对比
我们使用以下PHP代码,计算上面的 3 个随机密码生成函数生成 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 秒
可以看出方法一和方法二的执行时间都差不多,而方法三的运行时间稍微长了点。
原文:http://www.ludou.org/how-to-create-a-password-generator-using-php.html
PHP 相关文章推荐
将RTF格式的文件转成HTML并在网页中显示的代码
Oct 09 PHP
php仿discuz分页效果代码
Oct 02 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
Mar 21 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
php实现根据字符串生成对应数组的方法
Sep 22 PHP
php实现删除指定目录下相关文件的方法
Oct 20 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
thinkphp5+layui实现的分页样式示例
Oct 08 PHP
PHP安全技术之 实现php基本安全
Sep 04 #PHP
小文件php+SQLite存储方案
Sep 04 #PHP
PHP中文件上传的一个问题
Sep 04 #PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 #PHP
PHP开发需要注意的安全问题
Sep 01 #PHP
php中函数的形参与实参的问题说明
Sep 01 #PHP
php数据库连接时容易出错的特殊符号问题
Sep 01 #PHP
You might like
PHP读取MySQL数据代码
2008/06/05 PHP
PHP学习之数组值的操作
2011/04/17 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
jQuery 改变P标签文本值方法
2018/02/24 jQuery
NodeJS安装图文教程
2018/04/19 NodeJs
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
Python continue继续循环用法总结
2018/06/10 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
基于python实现操作git过程代码解析
2020/07/27 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
Python中的流程控制详解
2021/02/18 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
教师自我评价范文
2013/12/16 职场文书
出生公证书样本
2014/04/04 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
springcloud整合seata
2022/05/20 Java/Android
如何利用python实现Simhash算法
2022/06/28 Python