Android Java判断密码强度 强度显示

news2024/11/23 12:04:03

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位,按照密码强弱层度分成了弱中强三种情况。

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

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

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

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

解析正则表达式

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,项目中使用效果

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/663746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

61、基于51单片机无线蓝牙音乐喷泉控制系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)

方案选择 单片机的选择 方案一:AT89C52是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元…

MySql基础教程(一):创建删除选择数据库

MySql基础教程(一):创建删除选择数据库 1、创建数据库 创建一个名为 CSDN 的数据库 CREATE DATABASE CSDN;执行成功,数据库CSDN创建成功。 2、删除数据库 删除名为 CSDN 的数据库 DROP DATABASE CSDN;执行成功,CSDN数据库删除成功。 3…

【Java技术专题】「入门到精通系列教程」零基础带你认识网络请求工具鼻祖之HttpClient开发实战指南(执行请求篇)

零基础带你认识网络请求工具鼻祖之HttpClient开发实战指南 前言HttpClient的作用HttpClient可以实现什么?HttpClient无法实现什么? HttpClient的使用基础执行请求HTTP 请求查询字符串也可以从独立的参数中来生成 HTTP 响应HTTP 实体实体类型重复实体使用…

重新审视长时间序列预测:关于线性映射的调查

摘要 近年来,长时间序列预测得到了极大的关注。虽然有各种专门的设计来捕捉时间依耐性,但以前的研究表明,与其他复杂的架构相比,单一的线性层可以实现有竞争力的预测性能。在本文中,我们彻底调查了最近提出的方法内在…

微信小程序开发21__Echarts的应用

Echarts 是一个使用JS实现的开源可视化库, 其官网是 https://echarts.apache.org . 它提供了常规的折线图、柱状图、散点图、饼图、K线图等, 还支持图与图之间的混搭。 Echarts 的微信小程序版本的Github为 https://github.com/ecomfe/echarts-for-…

MySQL数据库日志管理、备份与恢复

目录 一、MySQL 日志管理 二、数据备份的重要性 造成数据丢失的原因 三、数据库备份的分类 1 、从物理与逻辑的角度 (1)备份划分 (2) 物理备份方法 2、 从数据库的备份策略角度 四、常见的备份方法 1、物理冷备 2、专用备…

天气热了,三叔请你吃瓜

目录 前言预备知识画一个完整的西瓜加些纹路切西瓜参考资料前言 六月份转眼就过去一半了,气温逐渐走高,每次经过小区门口的时候都会被那家水果店铺的吆喝声吸引住,“正宗南汇8424西瓜只要3元一斤啦”,每每都想冲进店里抱一个回来,可碍于囊中羞涩,只好作罢,晚餐过后闲暇…

Postman | 一分钟掌握Pre-request Script | 外部库的使用

简介 Postman内部提供了13种外部库,可以直接在前置请求脚本和后置请求脚本中使用,如果需要其他外部库,只需要使用如下方式引入即可: require(moduleName:String):function → * 一些内部库使用的例子 postman可用的外部库官网列…

[第一章 web入门]afr

afr_1 题目开头已经提示说是任意文件读取漏洞 所以这里还需要复习一下php伪协议php://filter 的作用 读取源代码并进行base64编码输出,不然传入的参数会直接当做php代码执行就看不到源代码内容了。php://filter即使在allow_url_fopen和allow_url_include双off情况下…

Day21 实战篇——Jmeter接口测试之案例实战——添加线程组、添加HTTP请求、获取所有学生接口

Day21 实战篇——Jmeter接口测试之案例实战——添加线程组、添加HTTP请求、获取所有学生接口 文章目录 Day21 实战篇——Jmeter接口测试之案例实战——添加线程组、添加HTTP请求、获取所有学生接口1、添加线程组2、添加HTTP请求3、获取所有学生接口3.1 Jmeter察看结果树中乱码:…

03_运行时数据区

目录 一、概述二、线程1、JVM系统线程 一、概述 二、线程 1、JVM系统线程

调用万维易源API实现天气预测

目录 1. 作者介绍2. 关于理论方面的知识介绍2.1 天气预测简介2.2 预测方法 3. 代码实现3.1 需要安装的包3.2 部分代码3.3 实验结果 1. 作者介绍 房庚晨,男,西安工程大学电子信息学院,22级研究生 研究方向:机器视觉与人工智能 电子…

【数据库四】MySQL备份与恢复

MySQL备份与恢复 1.数据库备份的分类1.1 数据备份的重要性1.2 数据库备份的分类1.3 常见的备份方法 2.MySQL完全备份与恢复2.1 MySQL完全备份2.2 数据库完全备份分类2.3 MySQL物理冷备份及恢复2.4 数据迁移DST2.5 mysqldump进行逻辑备份2.5.1 mysqldump备份数据库2.5.2 mysqldu…

基于卡尔曼滤波进行四旋翼动力学建模(SimulinkMatlab)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

下载routeview网站上的BGP更新数据

需求 给出起始时间和终止时间,从routeview网站上,下载在这两者之间的所有数据到本机,以便于进行后续的分析工作。 例如:2022.2.23 - 2022.2.26 主要流程 主流程在遍历每个月中实现 当月份小于10时,前面加‘0’&am…

算力军备竞赛白热化 “卖铲人”联想集团竞争力如何?

继微软通过OpenAI推出GPT系列、谷歌推出Bard和PaLM-E2之后,国内AI大模型也呈百家争鸣态势,年初至今,国内科技巨头几乎都发布了自研AI大模型产品,AI竞赛全面升级的背后,是全球科技巨头们对算力的争夺,作为算…

【kali学习笔记】利用第三方服务对目标进行被动信息收集

一、被动信息收集 1、概念: 信息收集的方式分为两种:被动收集和主动收集。被动信息收集方式是指利用第三方的服务对目标进行访问了解,比如Google搜索。主动信息收集方式:通过直接访问、扫描网站,这种流量流经网站的行…

Qt 中动态加载窗口(C++)

在编程中,我经常会遇见要根据用户触发按钮,动态生成窗口的情况。在此有两种方法可以动态生成窗口:一:直接在槽函数中调用窗口类。二:将 **.ui 添加到资源文件,通过 QUiLoader 加载。 现将两种方法介绍如下…

redhat 6.4安装oracle11g RAC (二)

创建一个asm Disk Group Name 组,并给一个名称ORC,并选择下面的三块盘,然后 Next错误的原因是由于磁盘数和冗余层级不匹配: 如果创建用来存放OCR和VOTEDISK的ASM磁盘组,那么External、Normal、High三种冗余级别对应的…

企业文件安全必知!掌握低代码平台的应用,事半功倍保障文件安全

在数字时代的今天,企业档案的安全变得比以往任何时候都更加重要。这些文件可能包含有关客户的敏感信息或必须始终保护的专有业务数据。但是,保护这些文件可能是一个复杂且耗时的过程,对于没有专门IT团队的公司来说尤其如此。这就是低代码平台…