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;
	}
}

猜你喜欢

转载自blog.csdn.net/lorraine_40t/article/details/83503744