密码复杂度检验

实现:
1) 密码至少8位
2) 包括大小写字母,数字,其他字符中的至少3种
3) 没有3个字符重复出现
4) 满足上述条件输出OK,否则NG

复制代码
public class T1 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s = sc.nextLine();
            if (s.length() > 7 && charRule3(s) > 2 && noRepeat3(s))
                System.out.println("OK");
            else
                System.out.println("NG");

        }

    }

    public static int charRule3(String s) {
        char[] c = s.toCharArray();
        int nn = 0;
        int na = 0;
        int nA = 0;
        int no = 0;
        for (int i = 0; i < s.length(); i++) {
            if (c[i] >= '0' && c[i] <= '9')
                nn = 1;
            else if (c[i] >= 'a' && c[i] <= 'z')
                na = 1;
            else if (c[i] >= 'A' && c[i] <= 'Z')
                nA = 1;
            else
                no = 1;

        }
        return nn + na + nA + no;

    }

    public static boolean noRepeat3(String s) {
        for (int i = 0; i < s.length() - 3; i++) {
            if (s.substring(i + 3, s.length()).contains(s.substring(i, i + 3)))
                return false;

        }
        return true;
    }

}
复制代码

 

密码复杂度检验 正则表达式

 

实现:
1) 密码至少8位
2) 包括大小写字母,数字,其他字符中的至少3种
3) 没有3个字符重复出现
4) 满足上述条件输出OK,否则NG
5) 使用正则表达式

复制代码
密码复杂度检验 正则表达式
实现:
1) 密码至少8位
2) 包括大小写字母,数字,其他字符中的至少3种
3) 没有3个字符重复出现
4) 满足上述条件输出OK,否则NG
5) 使用正则表达式


复制代码
     public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            while (sc.hasNext()) {
                String s = sc.nextLine();

                if (s.length() > 7 && hasUpperCaseLetter(s) + hasLowerCaseLetter(s) + hasNumber(s) + hasSymbol(s) > 2
                        && noRepeat3(s))
                    System.out.println("OK");

                else
                    System.out.println("NG");

            }

        }

        public static int hasUpperCaseLetter(String s) {
            String regexp = ".*[A-Z].*";
            Pattern p = Pattern.compile(regexp);
            Matcher m = p.matcher(s);

            if (m.find())
                return 1;
            else
                return 0;
        }

        public static int hasLowerCaseLetter(String s) {
            String regexp = ".*[a-z].*";
            Pattern p = Pattern.compile(regexp);
            Matcher m = p.matcher(s);

            if (m.find())
                return 1;
            else
                return 0;
        }

        public static int hasNumber(String s) {
            String regexp = ".*[0-9].*";
            Pattern p = Pattern.compile(regexp);
            Matcher m = p.matcher(s);

            if (m.find())
                return 1;
            else
                return 0;
        }

        public static int hasSymbol(String s) {
            String regexp = ".*[^a-zA-Z0-9].*";
            Pattern p = Pattern.compile(regexp);
            Matcher m = p.matcher(s);

            if (m.find())
                return 1;
            else
                return 0;
        }

        public static boolean noRepeat3(String s) {
            int count;
            for (int i = 0; i < s.length() - 4; i++) {
                String regexp = s.substring(i, i + 3);
                Pattern p = Pattern.compile(regexp);
                Matcher m = p.matcher(s);
                count = 0;
                while (m.find()) {
                    if (++count == 2)
                        return false;
                }

            }
            return true;

        }
View Code
复制代码

 

posted @   信尚  阅读(1090)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示