Android?Java判斷密碼強(qiáng)度方法實(shí)例(強(qiáng)度顯示)
1,正則表達(dá)式
密碼強(qiáng)度的正則表達(dá)式
public static final String WEAK_PATTERN = "(^(?=.*[0-9])(?=.*[a-z])[0-9a-z]{6,18}$)|(^(?=.*[0-9])(?=.*[A-Z])[0-9A-Z]{6,18}$)";//全數(shù)字+字母(大/?。? 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})";//數(shù)字+字母(大+小)/數(shù)字+小+特殊字符/數(shù)字+大+特殊字符 public static final String STRONG_PATTERN = "(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[^\\w\\s]).{6,18}";//數(shù)字+字母(大+?。?特殊字符
我們定義密碼至少有數(shù)字和字母,且最少6位最多18位,按照密碼強(qiáng)弱層度分成了弱中強(qiáng)三種情況。
弱:是數(shù)字+字母(大/?。?,此時(shí)的字母要么全是大寫,要么全是小寫
中:數(shù)字+字母(大+小)/數(shù)字+小+特殊字符/數(shù)字+大+特殊字符,情況比較多分為三種情況 :
- 數(shù)字+字母(大寫+小寫):此時(shí)字母大小寫同時(shí)存在
- 數(shù)字+小+特殊字符:數(shù)字+小寫字母+特殊字符(比如@、¥、*等)的組合
- 數(shù)字+大+特殊字符:數(shù)字+大寫字母+特殊字符的組合
強(qiáng):數(shù)字+字母(大+?。?特殊字符,數(shù)字+字母大小寫同時(shí)存在+特殊字符,最強(qiáng)密碼
解析正則表達(dá)式
WEAK_PATTERN
( // 開始第一個(gè)正則表達(dá)式組 ^ // 匹配字符串的開始位置 (?=.*[0-9]) // 正向先行斷言,匹配至少一個(gè)數(shù)字 (?=.*[a-z]) // 正向先行斷言,匹配至少一個(gè)小寫字母 [0-9a-z]{6,18} // 匹配6-18個(gè)數(shù)字或小寫字母的組合 $ // 匹配字符串的結(jié)束位置 ) // 結(jié)束第一個(gè)正則表達(dá)式組 | // 或 ( // 開始第二個(gè)正則表達(dá)式組 ^ // 匹配字符串的開始位置 (?=.*[0-9]) // 正向先行斷言,匹配至少一個(gè)數(shù)字 (?=.*[A-Z]) // 正向先行斷言,匹配至少一個(gè)大寫字母 [0-9A-Z]{6,18} // 匹配6-18個(gè)數(shù)字或大寫字母的組合 $ // 匹配字符串的結(jié)束位置 ) // 結(jié)束第二個(gè)正則表達(dá)式組
該正則表達(dá)式包含兩個(gè)正則表達(dá)式組,用 |
進(jìn)行分隔,表示匹配兩種不同的密碼格式,分別為:
- 至少包含一個(gè)數(shù)字和一個(gè)小寫字母的6-18位密碼;
- 至少包含一個(gè)數(shù)字和一個(gè)大寫字母的6-18位密碼。
每個(gè)正則表達(dá)式組都使用了正向先行斷言,確保密碼中至少包含指定的字符類型。然后使用字符集 [0-9a-z]
或 [0-9A-Z]
來匹配密碼中的數(shù)字和字母。最后使用 {6,18}
來限制密碼長(zhǎng)度在6-18個(gè)字符之間,并使用 ^
和 $
分別表示匹配字符串的開始和結(jié)束位置。
MEDIUM_PATTERN
( // 開始第一個(gè)正則表達(dá)式組 (?=.*[0-9]) // 正向先行斷言,匹配至少一個(gè)數(shù)字 (?=.*[a-z]) // 正向先行斷言,匹配至少一個(gè)小寫字母 (?=.*[A-Z]) // 正向先行斷言,匹配至少一個(gè)大寫字母 .{6,18} // 匹配6-18個(gè)任意字符 ) // 結(jié)束第一個(gè)正則表達(dá)式組 | // 或 ( // 開始第二個(gè)正則表達(dá)式組 (?=.*[0-9]) // 正向先行斷言,匹配至少一個(gè)數(shù)字 (?=.*[a-z]) // 正向先行斷言,匹配至少一個(gè)小寫字母 (?=.*[^\w\s]) // 正向先行斷言,匹配至少一個(gè)非單詞字符和非空白字符 .{6,18} // 匹配6-18個(gè)任意字符 ) // 結(jié)束第二個(gè)正則表達(dá)式組 | // 或 ( // 開始第三個(gè)正則表達(dá)式組 (?=.*[0-9]) // 正向先行斷言,匹配至少一個(gè)數(shù)字 (?=.*[A-Z]) // 正向先行斷言,匹配至少一個(gè)大寫字母 (?=.*[^\w\s]) // 正向先行斷言,匹配至少一個(gè)非單詞字符和非空白字符 .{6,18} // 匹配6-18個(gè)任意字符 ) // 結(jié)束第三個(gè)正則表達(dá)式組
該正則表達(dá)式包含三個(gè)正則表達(dá)式組,用 |
進(jìn)行分隔,表示匹配三種不同的密碼格式,分別為:
- 包含數(shù)字、小寫字母和大寫字母的6-18位密碼;
- 包含數(shù)字、小寫字母和非單詞字符和非空白字符的6-18位密碼;
- 包含數(shù)字、大寫字母和非單詞字符和非空白字符的6-18位密碼。
每個(gè)正則表達(dá)式組都使用了三個(gè)正向先行斷言,確保密碼中至少包含指定的字符類型。(?=.[0-9])
表示密碼中至少包含一個(gè)數(shù)字,(?=.[a-z])
表示密碼中至少包含一個(gè)小寫字母,(?=.[A-Z])
表示密碼中至少包含一個(gè)大寫字母,(?=.[^\w\s])
表示密碼中至少包含一個(gè)非單詞字符和非空白字符。
最后使用 .{6,18}
來匹配密碼中的任意字符,并限制密碼長(zhǎng)度在6-18個(gè)字符之間。
STRONG_PATTERN
( // 開始正則表達(dá)式組 ?=.*[0-9] // 正向先行斷言,匹配至少一個(gè)數(shù)字 (?=.*[a-z]) // 正向先行斷言,匹配至少一個(gè)小寫字母 (?=.*[A-Z]) // 正向先行斷言,匹配至少一個(gè)大寫字母 (?=.*[^\w\s]) // 正向先行斷言,匹配至少一個(gè)非單詞字符和非空白字符 .{6,18} // 匹配6-18個(gè)任意字符 ) // 結(jié)束正則表達(dá)式組
該正則表達(dá)式用于匹配包含數(shù)字、小寫字母、大寫字母和非單詞字符和非空白字符的6-18位密碼。
該正則表達(dá)式使用正向先行斷言,確保密碼中至少包含指定的字符類型。?=.*[0-9]
表示密碼中至少包含一個(gè)數(shù)字,?=.*[a-z]
表示密碼中至少包含一個(gè)小寫字母,?=.*[A-Z]
表示密碼中至少包含一個(gè)大寫字母,?=.*[^\w\s]
表示密碼中至少包含一個(gè)非單詞字符和非空白字符。
最后使用 .{6,18}
來匹配密碼中的任意字符,并限制密碼長(zhǎng)度在6-18個(gè)字符之間。
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); } }
測(cè)試結(jié)果
3,項(xiàng)目中使用效果
總結(jié)
到此這篇關(guān)于Android Java判斷密碼強(qiáng)度(強(qiáng)度顯示)的文章就介紹到這了,更多相關(guān)Android Java判斷密碼強(qiáng)度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring boot集成Go-FastDFS實(shí)現(xiàn)圖片上傳刪除等功能實(shí)現(xiàn)
這篇文章主要介紹了Spring boot集成Go-FastDFS實(shí)現(xiàn)圖片上傳刪除等功能實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Jmeter post上傳文件實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Jmeter post上傳文件實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08SpringBoot接收J(rèn)SON類型的參數(shù)方式
這篇文章主要介紹了SpringBoot接收J(rèn)SON類型的參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03Java中new關(guān)鍵字和newInstance方法的區(qū)別分享
在初始化一個(gè)類,生成一個(gè)實(shí)例的時(shí)候,newInstance()方法和new關(guān)鍵字除了一個(gè)是方法一個(gè)是關(guān)鍵字外,最主要的區(qū)別是創(chuàng)建對(duì)象的方式不同2013-07-07SpringBoot集成Kafka的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot集成Kafka的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01SpringCloud Zuul服務(wù)功能與使用方法解析
這篇文章主要介紹了SpringCloud Zuul服務(wù)功能與使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05