国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > PHP > 正文

PHP生成隨機(jī)碼的思路與方法實(shí)例探索

2024-05-05 00:08:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了PHP生成隨機(jī)碼的思路與方法。分享給大家供大家參考,具體如下:

背景

今天因?yàn)闊o(wú)聊,小伙伴讓寫(xiě)一個(gè)生成5位隨機(jī)碼的函數(shù),要求:可包含數(shù)字、字母大小寫(xiě),代碼盡量短。

解題思路

(1) . 第一思路

都是印象中匹配ASCII碼進(jìn)行隨機(jī)讀取的實(shí)現(xiàn)方法,此處可提供一個(gè)方法作為參考:

function get_rand_ascii($pw_length = 5){  $randpwd = '';  for ($i = 0; $i < $pw_length; $i++) {    $randpwd .= chr(mt_rand(33, 99));  }  return $randpwd;}

(2) . 第二思路

1.定義隨機(jī)數(shù)組,內(nèi)含能夠使用的所有字符

function getRandomString($length=5) {  //可任意添加需要的字符  $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"  );  $charsLen = count ( $chars ) - 1;  shuffle ( $chars ); // 將數(shù)組打亂  $output = "";  for($i = 0; $i < $length; $i ++) {    $output .= $chars [mt_rand ( 0, $charsLen )];  }  return $output;}

提示:此類(lèi)的代碼,建議去除可能引起歧義的字符,如:1、I、l、0、o、O、9、q.

缺點(diǎn):5個(gè)字符沒(méi)有重復(fù)

2.比較上述 1 中的數(shù)組形式,設(shè)計(jì)字符串形式參考如下:

function get_pass( $length = 8 ) {  // 密碼字符集,可任意添加你需要的字符  $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|';  $password = '';  for ( $i = 0; $i < $length; $i++ ) {    // 這里提供兩種字符獲取方式    // 第一種是使用 substr 截取$chars中的任意一位字符;    // 第二種是取字符數(shù)組 $chars 的任意元素    // $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);    $password .= $chars[ mt_rand(0, strlen($chars) - 1) ];  }  return $password;}

(3) . 第三思路

發(fā)現(xiàn)的新思路,可使用加密算法進(jìn)行獲取

public function getRand(){  $rand = rand(10000,100000);  $str = substr(base64_encode($rand), 0, 5);  return $str;}

提示:md5()函數(shù)只有數(shù)字和小寫(xiě)的字母

發(fā)現(xiàn):base64_encode()可以滿足要求

拓展延伸

針對(duì)于PHP設(shè)計(jì),一般的隨機(jī)碼可用于驗(yàn)證碼、分享碼的生成,著重注意位數(shù)的限制,必要情況下,保證該隨機(jī)碼的唯一性.

password_hash 的使用(PHP>5.5)

可用于用戶的密碼加密存儲(chǔ),不過(guò)有一點(diǎn)需注意:如果數(shù)據(jù)庫(kù)遷移,對(duì)于java或.net語(yǔ)言將難以適用.

$password = 'password1232456';//前端 獲取的原始密碼//數(shù)據(jù)庫(kù)存放的 使用BCRYPT算法加密的密碼//此處僅為測(cè)試,實(shí)際應(yīng)用時(shí)應(yīng)從數(shù)據(jù)表中查詢獲得//$db_pass = '$2y$10$2vJJC.rb/swAUnTfc9B94.l/ix75kiZHvOZFpu0Dd8uzp07YWlj4q';$db_pass = password_hash($password, PASSWORD_BCRYPT);if (password_verify($password , $db_pass)){  echo "密碼匹配";}else{  echo "密碼錯(cuò)誤";}

 

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 阿尔山市| 龙岩市| 肥西县| 滕州市| 海丰县| 微博| 讷河市| 彭州市| 贡嘎县| 甘南县| 葵青区| 罗平县| 丰顺县| 滨海县| 元阳县| 饶河县| 汤阴县| 当雄县| 山西省| 神池县| 吉安市| 沾化县| 平江县| 五寨县| 时尚| 华池县| 民乐县| 西宁市| 剑川县| 茌平县| 留坝县| 长宁区| 贡觉县| 库伦旗| 荆门市| 久治县| 烟台市| 太原市| 察雅县| 桐城市| 进贤县|