1. 程式人生 > >php生成隨機密碼

php生成隨機密碼

<?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( '&' ,'>' , '+' , '|' , ';' , '#' , '%', ']' , '[' , '=' , '$' , ',' , '(' , '!' , '/' , '^' , '_' , '{' ,  "'" 
		, "&lt;"
	, ':' , '*' , ')' , '?' , '}' , '-' , '~' , '@' , '`' , '.' , '"' );
	// 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;
	}
}