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 相关文章推荐
phpmyadmin 常用选项设置详解版
Mar 07 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
Oct 29 PHP
php对二维数组按指定键值key排序示例代码
Nov 26 PHP
PHP中常用的转义函数
Feb 28 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
TP5框架安全机制实例分析
Apr 05 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
ThinkPHP视图查询详解
2014/06/30 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
Js基础学习资料
2010/11/23 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
vue2过滤器模糊查询方法
2018/09/16 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
Python set常用操作函数集锦
2017/11/15 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
商务日语专业毕业生求职信
2013/10/26 职场文书
八年级历史教学反思
2014/01/10 职场文书
优秀党员事迹材料
2014/12/18 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
在职证明书模板
2015/06/15 职场文书
开票证明
2015/06/23 职场文书
公司新员工欢迎词
2015/09/30 职场文书
【TED出品】天梯非主流开心游1700 划水骑士
2022/03/31 魔兽争霸
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技