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判断密码强度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring boot集成Go-FastDFS实现图片上传删除等功能实现

    Spring boot集成Go-FastDFS实现图片上传删除等功能实现

    这篇文章主要介绍了Spring boot集成Go-FastDFS实现图片上传删除等功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Jmeter post上传文件实现过程详解

    Jmeter post上传文件实现过程详解

    这篇文章主要介绍了Jmeter post上传文件实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot接收JSON类型的参数方式

    SpringBoot接收JSON类型的参数方式

    这篇文章主要介绍了SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Java中字符串String常用方法详解

    Java中字符串String常用方法详解

    这篇文章主要给大家介绍了关于Java中字符串String常用方法的相关资料,String表示字符串类型,是引用数据类型不是基本数据类型,String是类且是最终类,不能有子类,文中将用法介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Java中new关键字和newInstance方法的区别分享

    Java中new关键字和newInstance方法的区别分享

    在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法一个是关键字外,最主要的区别是创建对象的方式不同
    2013-07-07
  • SpringBoot集成Kafka的实现示例

    SpringBoot集成Kafka的实现示例

    本文主要介绍了SpringBoot集成Kafka的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • Java中的Kafka为什么性能这么快及4大核心详析

    Java中的Kafka为什么性能这么快及4大核心详析

    这篇文章主要介绍了Java中的Kafka为什么性能这么快及4大核心详析,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • SpringCloud Zuul服务功能与使用方法解析

    SpringCloud Zuul服务功能与使用方法解析

    这篇文章主要介绍了SpringCloud Zuul服务功能与使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 基于java中子类的继承性的应用介绍

    基于java中子类的继承性的应用介绍

    本篇介绍了,基于java中子类的继承性的应用。需要的朋友参考下
    2013-05-05
  • Java面向对象基础知识之枚举

    Java面向对象基础知识之枚举

    这篇文章主要介绍了Java面向对象的之枚举,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-11-11

最新评论