-
1 # 盧顯煉
-
2 # 京東數科運營中心
如使用者註冊生成隨機密碼,使用者重置密碼也需要生成一個隨機的密碼。隨機密碼也就是一串固定長度的字串,文章整理了幾種生成隨機字串的方法。方法一
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 轉換成對應的字元。
方法二
1、預置一個的字串 $chars ,包括 a – z,A – Z,0 – 9,以及一些特殊字元。
2、在 $chars 字串中隨機取一個字元。
3、重複第二步n次,可得長度為n的密碼。
方法三
1、預置一個的字元陣列 $chars ,包括 a – z,A – Z,0 – 9,以及一些特殊字元。
2、透過array_rand()從陣列$chars中隨機選出$length個元素。
3、根據已獲取的鍵名陣列 $keys,從陣列$chars取出字元拼接字串。該方法的缺點是相同的字元不會重複取。
時間效率對比
我們使用以下PHP程式碼,計算上面的3 個隨機密碼生成函式生成6 位密碼的執行時間,進而對他們的時間效率進行一個簡單的對比。最終得出的結果是:
方法一:9.8943710327148E-5 秒 方法二:9.6797943115234E-5 秒 方法三:0.00017499923706055 秒 可以看出方法一和方法二的執行時間都差不多,而方法三的執行時間稍微長了點。透過比較三種方法的實現過程,時間效率對比,學習了PHP生成隨機字串的三種方法,希望可以對大家今後的學習有所幫助。
回覆列表
現在剛好也在自學PHP,來用自己學的分享一下。也希望大牛們給點指點。
用rand或mt_rand可以生成指定長度的隨機數。