美文网首页
简易密码匹配规则

简易密码匹配规则

作者: CentForever | 来源:发表于2022-01-23 13:15 被阅读0次

用户重置密码时,通常需要进行一定的密码匹配规则,以保证账户的安全性。
(一)密码必须是8至16位;
(二)密码必须包含英文字母和数字;
(三)密码不能包含4位连续相同的字符,如0000或AAAA;
(四)密码不能包含4位连续递增或连续递减的数字或字母,如1234或ABCD。

package Test;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    
    private static boolean isFourDigtialDec(String str){
        if (str == null || str ==""){
            return true ;
        }

        //String regEx="(?<=\\d|^)(?:(?:9(?=8|\\d))?(?:8(?=7|\\d))?(?:7(?=6|\\d))?(?:6(?=5|\\d))?(?:5(?=4|\\d))?(?:4(?=3|\\d))?(?:3(?=2|\\d))?(?:2(?=1|\\d))?(?:1(?=0|\\d))?(?:0(?=\\d|$))?)(?=\\d|$)";
        String regEx="^\\d(?:(?<=1)0|(?<=2)1|(?<=3)2|(?<=4)3|(?<=5)4|(?<=6)5|(?<=7)6|(?<=8)7|(?<=9)8){3}$";

        Pattern   p   =   Pattern.compile(regEx);        
        Matcher   m   =   p.matcher(str);  
        if (m.find()){

            return true ;
        }
        return false  ;
    }
    private static boolean isFourDigtialAdd(String str){
        if (str == null || str ==""){
            return true ;
        }

        String regEx="^\\d(?:(?<=0)1|(?<=1)2|(?<=2)3|(?<=3)4|(?<=4)5|(?<=5)6|(?<=6)7|(?<=7)8|(?<=8)9){3}$";     
        Pattern   p   =   Pattern.compile(regEx);        
        Matcher   m   =   p.matcher(str);  
        if (m.find()){

            return true ;
        }
        return false  ;
    }
    private static boolean isAllDigtial(String str){
        if (str == null || str ==""){
            return true ;
        }

        String regEx="^[0-9]{6,18}$";     
        Pattern   p   =   Pattern.compile(regEx);        
        Matcher   m   =   p.matcher(str);  
        if (m.find()){

            return true ;
        }
        return false  ;
    }
    private static boolean isAllLetter(String str){
        if (str == null || str ==""){
            return true ;
        }

        String regEx="^[a-zA-Z]{6,18}$";     
        Pattern   p   =   Pattern.compile(regEx);        
        Matcher   m   =   p.matcher(str);  
        if (m.find()){

            return true ;
        }
        return false  ;
    }
    private static boolean isFourDigtial(String str){
        if (str == null || str ==""){
            return true ;
        }

        String regEx="^[0-9]{4,4}$";     
        Pattern   p   =   Pattern.compile(regEx);        
        Matcher   m   =   p.matcher(str);  
        if (m.find()){

            return true ;
        }
        return false  ;
    }
    private static boolean isFourLetter(String str){
        if (str == null || str ==""){
            return true ;
        }

        String regEx="^[a-zA-Z]{4,4}$";     
        Pattern   p   =   Pattern.compile(regEx);        
        Matcher   m   =   p.matcher(str);  
        if (m.find()){

            return true ;
        }
        return false  ;
    }
    public static boolean isDGCheckUKEYPinPwd(String str){
        if (str == null || str ==""){
            return true ;
        }
        if(isAllDigtial(str)){
            return true;
        }
        if(isAllLetter(str)){
            return true;
        }
        //System.out.println(str);
        List<String> arr2 =new ArrayList<String>();
        int i=0;
        int len=str.length();
        //System.out.println(len);
        while(i<len-3){
            arr2.add(str.substring(i, i+4));
            //System.err.println(arr2.toString());
            i++;
        }
        int j=0;
        while(j<arr2.size()){
            if(isFourDigtial(arr2.get(j))){
                if((arr2.get(j).charAt(0)==arr2.get(j).charAt(1))&&(arr2.get(j).charAt(1)==arr2.get(j).charAt(2))&&(arr2.get(j).charAt(2)==arr2.get(j).charAt(3))){
                    return false;  
                }
                if(isFourDigtialAdd(arr2.get(j))){
                    return false;
                }
                if(isFourDigtialDec(arr2.get(j))){
                    return false;
                }
            }
            if(isFourLetter(arr2.get(j))){
                if((arr2.get(j).charAt(0)==arr2.get(j).charAt(1))&&(arr2.get(j).charAt(1)==arr2.get(j).charAt(2))&&(arr2.get(j).charAt(2)==arr2.get(j).charAt(3))){
                    return false;  
                }
                char[] arrPwd = new char[arr2.get(j).length()];
                
                for (int k = 3; k >= 0; k--) {
                    arrPwd[k]=arr2.get(j).charAt(k);
                }
                //System.out.println(arrPwd);
                //递增或者递减
                if(((arrPwd[3]-arrPwd[2]==1)&&(arrPwd[2]-arrPwd[1]==1)&&(arrPwd[1]-arrPwd[0]==1))||((arrPwd[3]-arrPwd[2]==-1)&&(arrPwd[2]-arrPwd[1]==-1)&&(arrPwd[1]-arrPwd[0]==-1))){
                    return false;
                }   
            }
            j++;
        }
        return true;
    }
    
    public static void main(String[] args) {
        System.err.println(isDGCheckUKEYPinPwd("ABCE1236ABCE"));
        //System.err.println(isFourDigtialAdd("12345"));
        //System.err.println(isFourDigtialDec("5432"));
    }
}

相关文章

  • 简易密码匹配规则

    用户重置密码时,通常需要进行一定的密码匹配规则,以保证账户的安全性。(一)密码必须是8至16位;(二)密码必须包含...

  • 简易密码匹配规则

    用户重置密码时,通常需要进行一定的密码匹配规则,以保证账户的安全性。(一)密码必须是8至16位;(二)密码必须包含...

  • 一条日志正则的匹配

    匹配规则 1 匹配规则 2 匹配规则 3 匹配规则 4

  • IPTable简介3——常用匹配

    三 、IPtables的常用匹配规则 匹配规则可以用!号进行非运算 1、常规匹配 1.1 通用匹配规则 -s(--...

  • netfilter之match和target

    匹配规则 iptables的rule中,匹配规则包含标准匹配和扩展匹配。 标准匹配标准匹配使用如下结构体表示,包含...

  • nginx 配置简介

    location 匹配规则 语法规则 location [=||*|^~] /uri/ { … } 前缀匹配时,N...

  • js-正则匹配 js验证字符串和对象

    // 正则匹配// 验证 字符串/中文/英文/用户名/验证码/手机号/密码规则/对象是否空Object.keys...

  • 1.shell变量替换

    1.${变量#匹配规则} 从头开始,最短匹配 2.${变量##匹配规则} 从头开始,最长匹配 3.${变量%匹...

  • 匹配规则

    1 最先开始的匹配拥有最高优先权2 贪婪匹配当正则表达式中能接受重复的限定符时,通常的行为是,在使整个表达式得到匹...

  • Hiho 1289 403 Forbidden(微软编程题)

    题意 输入 ip 按顺序匹配规则,优先匹配前面的规则,如果没有规则可以匹配则视为合法。注意:掩码为 0 的时候表示...

网友评论

      本文标题:简易密码匹配规则

      本文链接:https://www.haomeiwen.com/subject/hbcphrtx.html