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