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 feof用来识别文件末尾字符的方法
Aug 01 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
Apr 14 PHP
PHP计算加权平均数的方法
Jul 16 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
Sep 23 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
php微信公众平台开发(三)订阅事件处理
Dec 06 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
PHP 扩展Memcached命令用法实例总结
Jun 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
967 个函式
2006/10/09 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
使用Javascript简单计算器
2018/11/17 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
python比较2个xml内容的方法
2015/05/11 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
手术室护士自我鉴定
2013/10/14 职场文书
趣味活动策划方案
2014/02/08 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
优秀党支部申报材料
2014/12/24 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
入党心得体会
2019/06/20 职场文书