在專案裡有用到生成隨機密碼的需求,然後看到網上的
收到啟發,就自己寫了一個。
程式碼如下:
/** * 用於生成唯一密碼(加密方式md5) * @param len int 密碼長度 預設8 * @param pattern string 密碼字元的範圍 第一個是阿拉伯數字 開關 第二個是小寫字母 第三個大寫字母 第四個是特殊字元 如果 都用到就是1111 至少要有一個1 */ function randpass($len=8, $pattern='1000', $encode='md5') { static $seed = array( '0123456789', 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '+=-@#~,.[]()!%^*開關 1代表開啟 0表示關閉。。 不同專案資料庫,判斷自己寫下。 ); if(!is_string($pattern) || strpos('1', $pattern) == -1 || strlen($pattern) > count($seed)) send_error('','生成隨機字元傳模式格式有誤'); $pattern = str_split($pattern); $randStr = ''; foreach ($pattern as $key => $value) { if($value == '1') $randStr .= $seed[$key]; } // echo $randStr; $temppass = array_fill(0, $len, ''); if(!function_exists('getChar')){ function getChar(&$value, $key, $seed){ $value = $seed[mt_rand(0,strlen($seed)-1)]; } } array_walk($temppass, 'getChar', $randStr); $temppass = implode('', $temppass); # 資料庫碰撞判斷 $check_sql = "SELECT `uid` FROM user WHERE `password` = '".$encode($temppass)."'"; if(get_var($check_sql)) $temppass = randpass($len, $pattern, $encode); return $temppass; }開關 1代表開啟 0表示關閉。。
不同專案資料庫,判斷自己寫下。
send_error 自己改成自己的報錯方式。。
評論(1)