文章来源: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的几种方法的更多相关文章

  1. JS实现随机颜色的3种方法与颜色格式的转化

    JS实现随机颜色的3种方法与颜色格式的转化   随机颜色和颜色格式是我们在开发中经常要用到的一个小功能,网上相关的资料也很多,想着有必要总结一下自己的经验.所以这篇文章主要介绍了JS实现随机颜色的3种 ...

  2. javascript生成新标签的三种方法

    javascript生成新标签的三种方法:http://www.cnblogs.com/online-link/p/6062423.html

  3. Python - 生成随机验证码的3种实现方式

    生成6位随机验证码的3种实现方式如下: 1. 简单粗暴型:所有数字和字母都放入字符串: 2. 利用ascii编码的规律,遍历获取字符串和数字的字符串格式: 3. 引用string库. 方法1代码: i ...

  4. Asp.net生成随机不重复的函数(方法)

    // 生成三位毫秒字串         public static string Get_mSec()         {             string mSec = System.DateT ...

  5. MySQL查询随机数据的4种方法和性能对比

    从MySQL随机选取数据也是我们最常用的一种发发,其最简单的办法就是使用”ORDER BY RAND()”,本文介绍了包括ORDER BY RAND()的4种获取随机数据的方法,并分析了各自的优缺点. ...

  6. ABAP 动态生成内表的几种方法

    最近要写个程序,既有更新的,也有删除的,需要涉及到很多系统表,如果一个表一个表进行更新或者删除太慢了,于是就想通过创建动态内表来实现这些功能,在网上找了一些资料,经过多次尝试,终于测试成功了.网上讲述 ...

  7. 生成mif文件的几种方法总结

    mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.生成QuartusII11.0可用的mif文件,有如下几种方式: 方法1:利用Q ...

  8. 如何使用php生成唯一ID的4种方法

    php生成唯一ID的应用场景非常普遍,如临时缓存文件名称,临时变量,临时安全码等,uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID.由于生成唯一ID与微秒时间关联,因此ID的唯一性非常 ...

  9. php获取随机字符串的几种方法

    方法一:shuffle函数(打乱数组)和mt_rand函数(生成随机数,比rand速度快四倍) /** * 获得随机字符串 * @param $len 需要的长度 * @param $special ...

随机推荐

  1. 【知识总结】扩展卢卡斯定理(exLucas)

    扩展卢卡斯定理用于求如下式子(其中\(p\)不一定是质数): \[C_n^m\ mod\ p\] 我们将这个问题由总体到局部地分为三个层次解决. 层次一:原问题 首先对\(p\)进行质因数分解: \[ ...

  2. cmd bat 相对命令

    "%~dp0",在BAT中,是不是“相对路径”的意思 (2013-08-21 12:19:32) 转载▼ 标签: 杂谈 分类: C# 0念 零 ,代表你的批处理本身. d p是FO ...

  3. Unity学习-软件的基本操作(二)

    基本操作 1:Scene中 以小手显示,平移画布,与鼠标中键一样 2:平移 游戏对象,组件的 Position属性 也可设置 3:旋转 游戏对象,组件的 Rotation属性 也可设置 4:缩放 游戏 ...

  4. Java—break跳出语句

    在开发代码时,常常会产生这样的疑惑:break跳出语句是如何应用的呢? 使用break的场景有两种:一.switch语句中.二.循环语句. 这里就不介绍switch语句,主要说一下break在循环中的 ...

  5. 右边根据左边的高度自动居中只需要两行CSS就可以完成

    右边根据左边的高度自动居中只需要两行CSS就可以完成 <style type="text/css" > div{ display: inline-block; vert ...

  6. Android ScrollView里嵌套RecyclerView时,在RecyclerView上滑动时出现卡顿(冲突)的现象

    最近在项目中遇到一个现象,一个界面有一个RecyclerView(GridView型的),外面套了一层ScrollView,通过ScrollView上下滚动,但是在滑动的时候如果是在RecyclerV ...

  7. android黑科技系列——获取加固后应用App的所有方法信息

    一.前言 在逆向应用的时候,我们有时候希望能够快速定位到应用的关键方法,在之前我已经详细介绍了一个自己研发的代码动态注入工具icodetools,来进行动态注入日志信息到应用中,不了解的同学可以查看这 ...

  8. 这辈子写过的比较有意思的几个sql

    递归 with myRecursion as( select * from recursion where id=1 union all select r.* from myRecursion m,r ...

  9. CSS3设计炫目字体

    阴影 .text-shadow{ text-shadow:#FF0000 0 0 10px; color:white; font-size:60px } 描边 <style> .text- ...

  10. iOS实现图形编程可以使用三种API(UIKIT、Core Graphics、OpenGL ES及GLKit)

    这些api包含的绘制操作都在一个图形环境中进行绘制.一个图形环境包含绘制参数和所有的绘制需要的设备特定信息,包括屏幕图形环境.offscreen 位图环境和PDF图形环境,用来在屏幕表面.一个位图或一 ...