php实现密码强度规则

2,512 阅读1分钟

密码要求:

1.长度超过8位

2.包括大小写字母.数字.其它符号,以上四种至少三种

3.不能有相同长度超2的子串重复


如果符合要求输出:OK,否则输出NG

<?php
//分类来解决情况比较多或者稍微复杂一点的情况

$str = '密码字符串';
    //1、判断长度
    if(!isLength($str)){
        echo 'NG'.PHP_EOL;
    }
    //2、判断包括大小写字母.数字.其它符号,以上四种至少三种
    else if(!isMulti($str)){
        echo 'NG'.PHP_EOL;
    }
    //3、判断不能有相同长度超2的子串重复
    else if(hasSubstr($str)){
        echo 'NG'.PHP_EOL;
    }else{
        echo 'OK'.PHP_EOL;
    }


function isLength($str){
    $len=strlen($str);
    if($len>8) return true;
    else return false;
}

function isMulti($str){
    $myType=0;
    //有数字
    if(preg_match('/\d/',$str)) $myType++;
    //有大写字母
    if(preg_match('/[A-Z]/',$str)) $myType++;
    //有小写写字母
    if(preg_match('/[a-z]/',$str)) $myType++;
    //有其它字符
    $str2=preg_replace('/[A-Za-z0-9]/','',$str);
    $len2=strlen($str2);
    if($len2>=1) $myType++;
    
    if($myType>=3) return true;
    else return false;
}

    function hasSubstr($str){
        $len=strlen($str);
        for($i=0;$i<$len;$i++){
            $ii=$i;
            for($j=$ii+2;$j<$len;$j++){
                $jj=$j;
                $count=0;
                while($jj<$len&&$count<=2&&$str[$ii]==$str[$jj]){
                    //echo $str[$ii]." ".$str[$jj].PHP_EOL;
                    $ii++;
                    $jj++;
                    $count++;
                }
                if($count==3) return true;

            }
            
        }
        return false;
    }

?>