php生成隨機密碼
阿新 • • 發佈:2018-11-21
<?php /** * 隨機密碼生成 */ $_POST['number'] = 0; //數字 0:不啟用 1:啟用 $_POST['lowercase'] = 0; //小寫字母 $_POST['uppercase'] = 0; //大寫字母 $_POST['punctuation'] = 1; //特殊符號 $_POST['repeat'] = 0; //字元 1重複 0不重複 $_POST['length'] = 31; //密碼長度 $_POST['amount'] = 100; //密碼數量 // $m_arr = array(); // echo sizeof($m_arr);die; // echo "<pre>";var_dump($m_arr);die; create(); function create(){ check_post(); $arr=[]; for($i=0;$i<$_POST['amount'];$i++){ $str = ''; $str = create_one($_POST['length']); // var_dump($arr);die; if(in_array( $str , $arr )){ $str = repeat_secret( $arr , $str ); } $arr[$i] = $str; } echo "<pre>";var_dump($arr);die; } /** * 生成一個密碼 */ function create_one($length=8){ $str = ""; $m_arr = []; for($i=0;$i<$length;$i++){ if(empty($m_arr)){ $m_arr = func($m_arr); } $len = sizeof($m_arr); //獲取陣列長度 $k = mt_rand(0,count($m_arr)-1); $m = $m_arr[$k]; if( $_POST['repeat'] == 0 ){ //密碼生成不重複 // $m = repeat( $str , $m ); unset($m_arr[$k]); //刪除隨機索引 $m_arr=array_values($m_arr); //陣列索引重新排序 if(empty($m_arr)){ return $str .= $m; } } $str .= $m; } return $str; } /** * 獲取一個隨機字元 */ function func( $func=array() ){ if( empty($func) ){ if( $_POST['number']==1 ){ $func = array_merge($func, number() ); } if( $_POST['lowercase']==1 ){ $func = array_merge( $func , lowercase() ); } if($_POST['uppercase']==1 ){ $func = array_merge( $func , uppercase() ); } if( $_POST['punctuation']==1){ $func = array_merge( $func , punctuation() ); } } return $func; } /** * 獲取一個隨機大寫字元 */ function uppercase(){ return $uppercase = range('A','Z'); // return $uppercase[mt_rand(0,count($uppercase)-1)]; } /** * 獲取一個隨機小寫字元 */ function lowercase(){ return $lowercase = range('a','z'); // return $lowercase[mt_rand(0,count($lowercase)-1)]; } /** * 獲取一個隨機數字 * 轉換成字串後返回 */ function number(){ return $number = range('0','9'); // return strval( $number[mt_rand(0,count($number)-1)] ); } /** * 獲取一個隨機特殊符號 */ function punctuation(){ return $punctuation = array( '&' ,'>' , '+' , '|' , ';' , '#' , '%', ']' , '[' , '=' , '$' , ',' , '(' , '!' , '/' , '^' , '_' , '{' , "'" , "<" , ':' , '*' , ')' , '?' , '}' , '-' , '~' , '@' , '`' , '.' , '"' ); // return $punctuation[mt_rand(0,count($punctuation)-1)]; } /** * 檢查密碼字串是否有重複 */ function repeat( $str , $m ){ while(strpos($str, $m) != false){ $m = func(); repeat($str,$m); } return $m; } /** * 檢查密碼是否有重複 */ function repeat_secret( $arr , $m ){ while(in_array( $m , $arr ) == true ){ $m = create_one($_POST['length']); } return $m; } /** * 驗證引數是否合法 */ function check_post(){ if($_POST['number']==0 && $_POST['lowercase']==0 && $_POST['uppercase']==0 && $_POST['punctuation']==0){ echo "引數錯誤!";die; return false; } if($_POST['length']==0){ echo "密碼長度不能為0!";die; return false; } if($_POST['amount']==0){ echo "密碼個數不能為0!";die; return false; } }