PHP生成随机字符串(3种方法)


Posted in PHP onSeptember 25, 2015

如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码。随机密码也就是一串固定长度的字符串,文章整理了几种生成随机字符串的方法。
方法一

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 =  
{ 
$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 位密码的运行时间,进而对他们的时间效率进行一个简单的对比。最终得出的结果是:

方法一:9.8943710327148E-5 秒 
方法二:9.6797943115234E-5 秒 
方法三:0.00017499923706055 秒
可以看出方法一和方法二的执行时间都差不多,而方法三的运行时间稍微长了点。
通过比较三种方法的实现过程,时间效率对比,学习了PHP生成随机字符串的三种方法,希望可以对大家今后的学习有所帮助。

PHP 相关文章推荐
服务器web工具 php环境下
Dec 29 PHP
基于PHP文件操作的详细诠释
Jun 21 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
2014过年倒计时示例
Jan 31 PHP
php foreach正序倒序输出示例代码
Jul 01 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
Mar 03 PHP
joomla数据库操作示例代码
Jan 06 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
php获取当前url地址的方法小结
Jan 10 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
Oct 24 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 #PHP
十个PHP高级应用技巧果断收藏
Sep 25 #PHP
PHP中的Session对象如何使用
Sep 25 #PHP
如何解决PHP无法实现多线程的问题
Sep 25 #PHP
PHP网站建设的流程与步骤分享
Sep 25 #PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 #PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 #PHP
You might like
android上传图片到PHP的过程详解
2015/08/03 PHP
php提高网站效率的技巧
2015/09/29 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
2014/09/22 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
2015/07/01 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
react.js 获取真实的DOM节点实例(必看)
2017/04/17 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
用python代码做configure文件
2014/07/20 Python
python学生信息管理系统
2018/03/13 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python devel安装失败问题解决方案
2020/06/09 Python
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
总经理岗位职责
2013/11/09 职场文书
高中生期末评语
2014/01/28 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
关于颐和园的导游词
2015/01/30 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript