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 相关文章推荐
一个用php实现的获取URL信息的类
Jan 02 PHP
php排序算法(冒泡排序,快速排序)
Oct 09 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
Chrome Web App开发小结
Sep 04 PHP
php实现获取及设置用户访问页面语言类
Sep 24 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
Sep 15 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 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
zf框架的Filter过滤器使用示例
2014/03/13 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
jquery中radio checked问题
2015/03/16 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
javaScript中的空值和假值
2017/12/18 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
python写一个md5解密器示例
2018/02/23 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
东方红海科技面试题软件测试方面
2012/02/08 面试题
几道Java和数据库的面试题
2013/05/30 面试题
机关门卫制度
2014/02/01 职场文书
2014年消防工作实施方案
2014/02/20 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
小学教师自我评价
2015/03/04 职场文书
学校社团活动总结
2015/05/07 职场文书
团拜会主持词
2015/07/04 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
MySQL读取JSON转换的方式
2022/03/18 MySQL