首頁  >  文章  >  後端開發  >  php如何產生隨機密碼的方法簡單介紹

php如何產生隨機密碼的方法簡單介紹

黄舟
黄舟原創
2017-08-10 11:43:281162瀏覽


使用PHP開發應用程序,尤其是網站程序,常常需要產生隨機密碼,如用戶註冊產生隨機密碼,用戶重設密碼也需要產生一個隨機的密碼。隨機密碼也就是一串固定長度的字串,這裡我收集整理了幾種產生隨機字串的方法,以供大家參考。

方法一

  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 – z65 — — 90 對應A —— Z的英文字母,具體可參考ASCII 碼表。

<?phpfunction create_password($pw_length = 8) {
    $randpwd = &#39;&#39;;    for ($i = 0; $i < $pw_length; $i++) 
    {        $randpwd .= chr(mt_rand(33, 126));
    }    return $randpwd;
}// 调用该函数,传递长度参数$pw_length = 6echo create_password(6);

方法二

  1. 預設一個的字串

    $chars ,包括a – z,A – Z,0 – 9,以及一些特殊字元

  2. $chars 字串中隨機取一個字元

  3. ##重複第二步n 次,可得長度為n 的密碼
  4. <?php
    function generate_password( $length = 8 ) {
        // 密码字符集,可任意添加你需要的字符    
        $chars = &#39;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_[]{}<>~`+=,.;:/?|&#39;;    
        $password = &#39;&#39;;
        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);
  5. 方法三

    預設一個的字元陣列
  1. $ chars

    ,包括a – z,A – Z,0 – 9,以及一些特殊字元

  2. 透過
  3. array_rand()

    從陣列$chars 中隨機選取$length 個元素

  4. 根據已取得的鍵名陣列
  5. $keys

    ,從陣列$chars 取出字元拼接字串。此方法的缺點是相同的字元不會重複取。

    <?phpfunction make_password( $length = 8 ) {
        // 密码字符集,可任意添加你需要的字符
        $chars = array(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;, &#39;h&#39;, 
        &#39;i&#39;, &#39;j&#39;, &#39;k&#39;, &#39;l&#39;,&#39;m&#39;, &#39;n&#39;, &#39;o&#39;, &#39;p&#39;, &#39;q&#39;, &#39;r&#39;, &#39;s&#39;, 
        &#39;t&#39;, &#39;u&#39;, &#39;v&#39;, &#39;w&#39;, &#39;x&#39;, &#39;y&#39;,&#39;z&#39;, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, 
        &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;, &#39;I&#39;, &#39;J&#39;, &#39;K&#39;, &#39;L&#39;,&#39;M&#39;, &#39;N&#39;, &#39;O&#39;, 
        &#39;P&#39;, &#39;Q&#39;, &#39;R&#39;, &#39;S&#39;, &#39;T&#39;, &#39;U&#39;, &#39;V&#39;, &#39;W&#39;, &#39;X&#39;, &#39;Y&#39;,&#39;Z&#39;, 
        &#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;!&#39;, 
        &#39;@&#39;,&#39;#&#39;, &#39;$&#39;, &#39;%&#39;, &#39;^&#39;, &#39;&&#39;, &#39;*&#39;, &#39;(&#39;, &#39;)&#39;, &#39;-&#39;, &#39;_&#39;, 
        &#39;[&#39;, &#39;]&#39;, &#39;{&#39;, &#39;}&#39;, &#39;<&#39;, &#39;>&#39;, &#39;~&#39;, &#39;`&#39;, &#39;+&#39;, &#39;=&#39;, &#39;,&#39;, 
        &#39;.&#39;, &#39;;&#39;, &#39;:&#39;, &#39;/&#39;, &#39;?&#39;, &#39;|&#39;);    // 在 $chars 中随机取 $length 个数组元素键名
        $keys = array_rand($chars, $length); 
    
        $password = &#39;&#39;;    for($i = 0; $i < $length; $i++)
        {        // 将 $length 个数组元素连接成字符串
            $password .= $chars[$keys[$i]];
        }    return $password;
    }echo make_password(6);
  6. 方法四

利用md5加密目前時間戳記的方式,截取部分幾位。產生的密碼只包括字母和數字。

    time() 取得目前的Unix 時間戳
  1. 將第一步取得的時間戳記進行md5() 加密
  2. 將第二步加密的結果,截取n 位元即得想要的密碼
  3. <?phpfunction get_password( $length = 8 )  {
        $str = substr(md5(time()), 0, $length);    return $str;
    }echo get_password(6);
  4. 方法五

str_shuffle — 隨機打亂一個字串

<?phpfunction random_pass( $length = 8 ){
    $password = &#39;&#39;;    
    $chars = &#39;abcdefghijkmnpqrstuvwxyz23456789ABCDEFGHIJKMNPQRSTUVWXYZ&#39;; //去掉1跟字母l防混淆            
    if ($length > strlen($chars)) {//位数过长重复字符串一定次数
        $chars = str_repeat($chars, ceil($length / strlen($chars)));
    }    $chars = str_shuffle($chars);    
    $password = substr($chars, 0, $length);    
    return $password;
}echo random_pass(6);

#

以上是php如何產生隨機密碼的方法簡單介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn