欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java正則表達(dá)式判斷強密碼和隨機(jī)生成強密碼代碼示例

 更新時間:2023年08月02日 10:01:22   作者:JurenXxt  
這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式判斷強密碼和隨機(jī)生成強密碼的相關(guān)資料,最近需要一個密碼強度正則表達(dá)式在用戶注冊時校驗用戶密碼強度,需要的朋友可以參考下

前言

項目中遇到需要判斷管理員登陸密碼為強密碼,同時可以自動隨機(jī)生成強密碼,寫了一個函數(shù)。

一、定義幾個常量

// 先把需要驗證的規(guī)則放入一個字符數(shù)組中
  private static final char[] CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@#$%^&+="
          .toCharArray();
//定義正則表達(dá)式規(guī)則至少要一個大寫字母一個小寫字母一個特殊字符,密碼長度在8~16位之間
  private static final String PASSWORD_REGEX = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]){1,2}+(?=\\S+$).{8,16}$";
//判斷密碼中是否有中文
  private static final String NO_CHINESE_REGEX = "^[^\\u4e00-\\u9fa5]+$";
//根據(jù)上面兩個規(guī)則創(chuàng)建兩個模式用于校驗
  private static final Pattern PASSWORD_PATTERN = Pattern.compile(PASSWORD_REGEX);
  private static final Pattern NO_CHINESE_PATTERN = Pattern.compile(NO_CHINESE_REGEX);

二、生成強密碼

    /**
     * 隨機(jī)生成強密碼
     * @param length 密碼長度
     * @return password
     */
    public static String generatePassword(int length) {
    //判斷密碼是否在8~16位之間超出或小于都會設(shè)置默認(rèn)長度
        length = length < 8 ? 8 : length;
        length = length > 16 ? 16 : length;
        //調(diào)用獲取隨機(jī)強密碼函數(shù)
        String result = getRandomPassword(length);
        // 如果規(guī)則滿足條件直接返回強密碼,否則再次調(diào)用
        Matcher m = PASSWORD_PATTERN.matcher(result);
        Matcher m1 = NO_CHINESE_PATTERN.matcher(result);
        if (m.matches() && m1.matches()) {
            return result;
        }
        return generatePassword(length);
    }
    //隨機(jī)生成強密碼
 	private static String getRandomPassword(int length) {
        StringBuilder sb = new StringBuilder();
        //線程安全隨機(jī)數(shù)
        ThreadLocalRandom r = ThreadLocalRandom.current();
        for (int x = 0; x < length; ++x) {
        //添加CHAR里面的隨機(jī)下標(biāo)
            sb.append(CHAR[r.nextInt(CHAR.length)]);
        }
        return sb.toString();
    }

三.校驗密碼強度

    /**
     * 校驗密碼復(fù)雜度,至少包含8個字符,最多包含20個自負(fù)
     * 至少包含一個數(shù)字,一個大寫字母,一個小寫字母,一個特殊字符,同時不能包含空白區(qū)域
     * @param password 密碼
     * @return true/false
     */
    public static boolean checkPasswordComplexity(String password) {
        if(StringUtils.isBlank(password)){
            return false;
        }
        if (password.length()> 8 && password.length() < 16) {
            //密碼至少包含:大小寫英文字母、數(shù)字、特殊符號,密碼長度大于8位,小于16位
            String regex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,16}$";
            // 判斷密碼是否匹配規(guī)則
            return Pattern.matches(regex, password);
        }
        else {
            return false;
        }
    }

總結(jié)

以上就是java如何使用正則表達(dá)式判斷是否為強密碼和如何隨機(jī)生成強密碼。

到此這篇關(guān)于java正則表達(dá)式判斷強密碼和隨機(jī)生成強密碼的文章就介紹到這了,更多相關(guān)java正則判斷強密碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中@Primary注解的作用詳解

    Spring中@Primary注解的作用詳解

    這篇文章主要介紹了Spring中@Primary注解的作用詳解,@Primary 注解是Spring框架中的一個注解,用于標(biāo)識一個Bean作為默認(rèn)的實現(xiàn)類,當(dāng)存在多個實現(xiàn)類時,通過使用@Primary注解,可以指定其中一個作為默認(rèn)的實現(xiàn)類,以便在注入時自動選擇該實現(xiàn)類,需要的朋友可以參考下
    2023-10-10
  • SpringBoot?@InitBinder注解綁定請求參數(shù)的過程詳解

    SpringBoot?@InitBinder注解綁定請求參數(shù)的過程詳解

    這篇文章主要介紹了SpringBoot?@InitBinder注解綁定請求參數(shù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 詳解Java中綴表達(dá)式的實現(xiàn)

    詳解Java中綴表達(dá)式的實現(xiàn)

    中綴表達(dá)式是一個通用的算術(shù)或邏輯公式表示方法。,中綴表達(dá)式不容易被計算機(jī)解析,但仍被許多程序語言使用,因為它符合人們的普遍用法。本文介紹了實現(xiàn)中綴表達(dá)式的方法,需要的可以參考一下
    2022-07-07
  • Java 中的 xx ≠ null 是什么新語法

    Java 中的 xx ≠ null 是什么新語法

    Java中null是一個關(guān)鍵字,用來標(biāo)識一個不確定的對象。因此可以將null賦給引用類型變量,但不可以將null賦給基本類型變量。本文給大家分享Java 中的 xx ≠ null 是什么新語法,感興趣的朋友一起看看吧
    2021-06-06
  • 淺談@FeignClient中name和value屬性的區(qū)別

    淺談@FeignClient中name和value屬性的區(qū)別

    這篇文章主要介紹了@FeignClient中name和value屬性的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • spring中@ComponentScan自動掃描并指定掃描規(guī)則

    spring中@ComponentScan自動掃描并指定掃描規(guī)則

    本文主要介紹了spring中@ComponentScan自動掃描并指定掃描規(guī)則,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java從內(nèi)存角度帶你理解數(shù)組名實質(zhì)是個地址的論述

    Java從內(nèi)存角度帶你理解數(shù)組名實質(zhì)是個地址的論述

    這篇文章主要介紹了Java如何從內(nèi)存解析的角度理解“數(shù)組名實質(zhì)是一個地址”,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • springboot Quartz動態(tài)修改cron表達(dá)式的方法

    springboot Quartz動態(tài)修改cron表達(dá)式的方法

    這篇文章主要介紹了springboot Quartz動態(tài)修改cron表達(dá)式的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • java實現(xiàn)計算周期性提醒的示例

    java實現(xiàn)計算周期性提醒的示例

    本文分享一個java實現(xiàn)計算周期性提醒的示例,可以計算父親節(jié)、母親節(jié)這樣的節(jié)日,也可以定義如每月最好一個周五,以方便安排會議
    2014-04-04
  • Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之隊列

    Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之隊列

    這篇文章主要介紹了Java隊列數(shù)據(jù)結(jié)構(gòu)的實現(xiàn),隊列是一種特殊的線性表,只允許在表的隊頭進(jìn)行刪除操作,在表的后端進(jìn)行插入操作,隊列是一個有序表先進(jìn)先出,想了解更多相關(guān)資料的小伙伴可以參考下面文章的詳細(xì)內(nèi)容
    2022-02-02

最新評論