Android Java判断密码强度方法实例(强度显示)

 更新时间:2024年03月16日 08:43:28   作者:才疏学浅,努力修炼  
在现代社会中,密码是确保我们个人信息和账户安全的重要手段之一,为了提高密码的安全性,我们可以使用正则表达式来判断密码的强度,这篇文章主要给大家介绍了关于Android Java判断密码强度(强度显示)的相关资料,需要的朋友可以参考下

1,正则表达式

密码强度的正则表达式

    public static final String WEAK_PATTERN = "(^(?=.*[0-9])(?=.*[a-z])[0-9a-z]{6,18}$)|(^(?=.*[0-9])(?=.*[A-Z])[0-9A-Z]{6,18}$)";//全数字+字母(大/小)
    public static final String MEDIUM_PATTERN = "((?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{6,18})|((?=.*[0-9])(?=.*[a-z])(?=.*[^\\w\\s]).{6,18})|((?=.*[0-9])(?=.*[A-Z])(?=.*[^\\w\\s]).{6,18})";//数字+字母(大+小)/数字+小+特殊字符/数字+大+特殊字符
    public static final String STRONG_PATTERN = "(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[^\\w\\s]).{6,18}";//数字+字母(大+小)+特殊字符

我们定义密码至少有数字和字母,且最少6位最多18位,按照密码强弱层度分成了弱中强三种情况。

弱:是数字+字母(大/小),此时的字母要么全是大写,要么全是小写

中:数字+字母(大+小)/数字+小+特殊字符/数字+大+特殊字符,情况比较多分为三种情况     :

  • 数字+字母(大写+小写):此时字母大小写同时存在
  • 数字+小+特殊字符:数字+小写字母+特殊字符(比如@、¥、*等)的组合
  • 数字+大+特殊字符:数字+大写字母+特殊字符的组合

强:数字+字母(大+小)+特殊字符,数字+字母大小写同时存在+特殊字符,最强密码

解析正则表达式

WEAK_PATTERN

(                           // 开始第一个正则表达式组
    ^                       // 匹配字符串的开始位置
    (?=.*[0-9])             // 正向先行断言,匹配至少一个数字
    (?=.*[a-z])             // 正向先行断言,匹配至少一个小写字母
    [0-9a-z]{6,18}          // 匹配6-18个数字或小写字母的组合
    $                       // 匹配字符串的结束位置
)                           // 结束第一个正则表达式组
|                           // 或
(                           // 开始第二个正则表达式组
    ^                       // 匹配字符串的开始位置
    (?=.*[0-9])             // 正向先行断言,匹配至少一个数字
    (?=.*[A-Z])             // 正向先行断言,匹配至少一个大写字母
    [0-9A-Z]{6,18}          // 匹配6-18个数字或大写字母的组合
    $                       // 匹配字符串的结束位置
)                           // 结束第二个正则表达式组

该正则表达式包含两个正则表达式组,用 | 进行分隔,表示匹配两种不同的密码格式,分别为:

  • 至少包含一个数字和一个小写字母的6-18位密码;
  • 至少包含一个数字和一个大写字母的6-18位密码。

每个正则表达式组都使用了正向先行断言,确保密码中至少包含指定的字符类型。然后使用字符集 [0-9a-z] 或 [0-9A-Z] 来匹配密码中的数字和字母。最后使用 {6,18} 来限制密码长度在6-18个字符之间,并使用 ^ 和 $ 分别表示匹配字符串的开始和结束位置。

MEDIUM_PATTERN

(                                   // 开始第一个正则表达式组
    (?=.*[0-9])                     // 正向先行断言,匹配至少一个数字
    (?=.*[a-z])                     // 正向先行断言,匹配至少一个小写字母
    (?=.*[A-Z])                     // 正向先行断言,匹配至少一个大写字母
    .{6,18}                         // 匹配6-18个任意字符
)                                   // 结束第一个正则表达式组
|                                   // 或
(                                   // 开始第二个正则表达式组
    (?=.*[0-9])                     // 正向先行断言,匹配至少一个数字
    (?=.*[a-z])                     // 正向先行断言,匹配至少一个小写字母
    (?=.*[^\w\s])                   // 正向先行断言,匹配至少一个非单词字符和非空白字符
    .{6,18}                         // 匹配6-18个任意字符
)                                   // 结束第二个正则表达式组
|                                   // 或
(                                   // 开始第三个正则表达式组
    (?=.*[0-9])                     // 正向先行断言,匹配至少一个数字
    (?=.*[A-Z])                     // 正向先行断言,匹配至少一个大写字母
    (?=.*[^\w\s])                   // 正向先行断言,匹配至少一个非单词字符和非空白字符
    .{6,18}                         // 匹配6-18个任意字符
)                                   // 结束第三个正则表达式组

该正则表达式包含三个正则表达式组,用 | 进行分隔,表示匹配三种不同的密码格式,分别为:

  • 包含数字、小写字母和大写字母的6-18位密码;
  • 包含数字、小写字母和非单词字符和非空白字符的6-18位密码;
  • 包含数字、大写字母和非单词字符和非空白字符的6-18位密码。

每个正则表达式组都使用了三个正向先行断言,确保密码中至少包含指定的字符类型。(?=.[0-9]) 表示密码中至少包含一个数字,(?=.[a-z]) 表示密码中至少包含一个小写字母,(?=.[A-Z]) 表示密码中至少包含一个大写字母,(?=.[^\w\s]) 表示密码中至少包含一个非单词字符和非空白字符。

最后使用 .{6,18} 来匹配密码中的任意字符,并限制密码长度在6-18个字符之间。

STRONG_PATTERN

(                           // 开始正则表达式组
    ?=.*[0-9]               // 正向先行断言,匹配至少一个数字
    (?=.*[a-z])             // 正向先行断言,匹配至少一个小写字母
    (?=.*[A-Z])             // 正向先行断言,匹配至少一个大写字母
    (?=.*[^\w\s])           // 正向先行断言,匹配至少一个非单词字符和非空白字符
    .{6,18}                 // 匹配6-18个任意字符
)                           // 结束正则表达式组

该正则表达式用于匹配包含数字、小写字母、大写字母和非单词字符和非空白字符的6-18位密码。

该正则表达式使用正向先行断言,确保密码中至少包含指定的字符类型。?=.*[0-9] 表示密码中至少包含一个数字,?=.*[a-z] 表示密码中至少包含一个小写字母,?=.*[A-Z] 表示密码中至少包含一个大写字母,?=.*[^\w\s] 表示密码中至少包含一个非单词字符和非空白字符。

最后使用 .{6,18} 来匹配密码中的任意字符,并限制密码长度在6-18个字符之间。

2,使用方法

    public static String checkStrength(String password) {
        if (Pattern.matches(STRONG_PATTERN, password)) {
            return "strong";
        }else if (Pattern.matches(MEDIUM_PATTERN, password)) {
            return "medium";
        } else if (Pattern.matches(WEAK_PATTERN, password)) {
            return "weak";
        }else {
            return "invalid";
        }
    }

    public static void main(String[] args) {
        while(true){
            Scanner scan = new Scanner(System.in);
            String password = scan.next();
            String strength = checkStrength(password);
            System.out.println("Password strength: " + strength);
        }
    }

测试结果

3,项目中使用效果

总结

到此这篇关于Android Java判断密码强度(强度显示)的文章就介绍到这了,更多相关Android Java判断密码强度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 超个性修改SpringBoot项目的启动banner的方法

    超个性修改SpringBoot项目的启动banner的方法

    这篇文章主要介绍了超个性修改SpringBoot项目的启动banner的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Spring 框架的 MethodInterceptor 简介及示例代码

    Spring 框架的 MethodInterceptor 简介及示例代码

    MethodInterceptor接口定义了一个方法Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) ,该方法在代理对象的方法被调用时被触发,这篇文章主要介绍了Spring 框架的 MethodInterceptor 简介及示例代码,需要的朋友可以参考下
    2023-09-09
  • Java动态代理机制的实例详解

    Java动态代理机制的实例详解

    这篇文章主要介绍了 Java动态代理机制的实例详解的相关资料,希望通过本文大家能够掌握动态代理机制,需要的朋友可以参考下
    2017-09-09
  • Java File类常用方法与文件过滤器详解

    Java File类常用方法与文件过滤器详解

    Java File类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。File对象代表磁盘中实际存在的文件和目录。本篇文章我们来讲解File类的常用方法与文件过滤器
    2022-04-04
  • 使用指定的JDK启动IDEA的三种方法

    使用指定的JDK启动IDEA的三种方法

    今天小编就为大家分享一篇关于使用指定的JDK启动IDEA的三种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Redis分布式锁实现方式及超时问题解决

    Redis分布式锁实现方式及超时问题解决

    这篇文章主要介绍了Redis分布式锁实现方式及超时问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • IntelliJ IDEA 创建spring boot 的Hello World 项目(图解)

    IntelliJ IDEA 创建spring boot 的Hello World 项目(图解)

    这篇文章主要介绍了IntelliJ IDEA 创建spring boot 的Hello World 项目的步骤详解,需要的朋友可以参考下
    2018-01-01
  • Java实现Token登录验证的项目实践

    Java实现Token登录验证的项目实践

    本文主要介绍了Java实现Token登录验证的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 浅谈Spring Cloud Ribbon的原理

    浅谈Spring Cloud Ribbon的原理

    这篇文章主要介绍了浅谈Spring Cloud Ribbon的原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 详解SpringBoot 添加对JSP的支持(附常见坑点)

    详解SpringBoot 添加对JSP的支持(附常见坑点)

    这篇文章主要介绍了详解SpringBoot 添加对JSP的支持(附常见坑点),非常具有实用价值,需要的朋友可以参考下
    2017-10-10

最新评论