php生成随机password的几种方法
文章来源:PHP开发学习门户
地址:http://www.phpthinking.com/archives/523
使用PHP开发应用程序,尤其是站点程序。经常须要生成随机password,如用户注冊生成随机password,用户重置password也须要生成一个随机的password。随机password也就是一串固定长度的字符串。这里我收集整理了几种生成随机字符串的方法,以供大家參考。
方法一:
1、在 33 – 126 中生成一个随机整数,如 35。
2、将 35 转换成相应的ASCII码字符。如 35 相应 #
3、反复以上 1、2 步骤 n 次。连接成 n 位的password
该算法主要用到了两个函数,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 的password
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;
}
echo generate_password(6);
方法三:
算法简单,代码简短,仅仅是由于md5()函数的返回值的缘故。生成的password仅仅包含字母和数字。只是也算是一个不错的方法。
算法思想:
1、time() 获取当前的 Unix 时间戳
2、将第一步获取的时间戳进行 md5() 加密
3、将第二步加密的结果,截取 n 位即得想要的password
function get_password( $length = 8 )
{
$str = substr(md5(time()), 0, 6);
return $str;
}
echo get_password(6);
时间效率对照
我们使用下面PHP代码,计算上面的 3 个随机password生成函数生成 6 位password的执行时间。进而对他们的时间效率进行一个简单的对照。
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 秒
方法三:3.4093856811523E-5 秒
能够看出方法一和方法二的执行时间都差点儿相同,方法四执行时间最短。
php生成随机password的几种方法的更多相关文章
- JS实现随机颜色的3种方法与颜色格式的转化
JS实现随机颜色的3种方法与颜色格式的转化 随机颜色和颜色格式是我们在开发中经常要用到的一个小功能,网上相关的资料也很多,想着有必要总结一下自己的经验.所以这篇文章主要介绍了JS实现随机颜色的3种 ...
- javascript生成新标签的三种方法
javascript生成新标签的三种方法:http://www.cnblogs.com/online-link/p/6062423.html
- Python - 生成随机验证码的3种实现方式
生成6位随机验证码的3种实现方式如下: 1. 简单粗暴型:所有数字和字母都放入字符串: 2. 利用ascii编码的规律,遍历获取字符串和数字的字符串格式: 3. 引用string库. 方法1代码: i ...
- Asp.net生成随机不重复的函数(方法)
// 生成三位毫秒字串 public static string Get_mSec() { string mSec = System.DateT ...
- MySQL查询随机数据的4种方法和性能对比
从MySQL随机选取数据也是我们最常用的一种发发,其最简单的办法就是使用”ORDER BY RAND()”,本文介绍了包括ORDER BY RAND()的4种获取随机数据的方法,并分析了各自的优缺点. ...
- ABAP 动态生成内表的几种方法
最近要写个程序,既有更新的,也有删除的,需要涉及到很多系统表,如果一个表一个表进行更新或者删除太慢了,于是就想通过创建动态内表来实现这些功能,在网上找了一些资料,经过多次尝试,终于测试成功了.网上讲述 ...
- 生成mif文件的几种方法总结
mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.生成QuartusII11.0可用的mif文件,有如下几种方式: 方法1:利用Q ...
- 如何使用php生成唯一ID的4种方法
php生成唯一ID的应用场景非常普遍,如临时缓存文件名称,临时变量,临时安全码等,uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID.由于生成唯一ID与微秒时间关联,因此ID的唯一性非常 ...
- php获取随机字符串的几种方法
方法一:shuffle函数(打乱数组)和mt_rand函数(生成随机数,比rand速度快四倍) /** * 获得随机字符串 * @param $len 需要的长度 * @param $special ...
随机推荐
- $P2299 Mzc和体委的争夺战$
\(problem\) #ifdef Dubug #endif #include <bits/stdc++.h> using namespace std; typedef long lon ...
- python爬虫值requests模块
- 基于如下5点展开requests模块的学习 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在 ...
- Android Market google play store帐号注册方法流程 及发布应用注意事项【转载】
[转载]http://www.cnblogs.com/zdz8207/archive/2012/07/09/google-play-store-registered.html Android Mark ...
- 单例模式在多线程环境下的lazy模式为什么要加两个if(instance==null)
刚才在看阿寻的博客”C#设计模式学习笔记-单例模式“时,发现了评论里有几个人在问单例模式在多线程环境下为什么lazy模式要加两个if进行判断,评论中的一个哥们剑过不留痕,给他们写了一个demo来告诉他 ...
- [ SHOI 2012 ] 随机树
\(\\\) \(Description\) 开始有一棵只有一个根节点的树.每次随机选择一个叶子节点,为他添上左右子节点,求: 生成一棵有\(N\)个叶节点的树,所有叶节点平均高度的期望. 生成一棵有 ...
- 关于 WebView 的一些笔记
什么是 WebView WebView 是手机中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装的一个组件.没有提供地址栏和导航栏, WebView 只是单纯的展示一个网页界面.在开发中 ...
- 【sqli-labs】 less58 GET -Challenge -Double Query -5 queries allowed -Variation1 (GET型 挑战 双查询 只允许5次查询 变化1)
单引号闭合成功,但是union select结果不对 http://192.168.136.128/sqli-labs-master/Less-58/?id=0' union select 1,2,3 ...
- 阿里云ECS远程桌面连接失败
管理=>本实例安全组=>配置规则=>配置3389端口
- groupbox
使用groupbox将radiobox 放入其中可以使组框中只选中一个
- spring boot 2.0 报错:“jdbcUrl is required with driverClassName.” 解决办法!
springboot 升级到2.0之后发现配置多数据源的时候报错: "jdbcUrl is required with driverClassName."或者Cause: java ...