最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)通過時(shí)間獲取8位驗(yàn)證碼

 更新時(shí)間:2023年11月10日 10:05:23   作者:シ風(fēng)箏  
這篇文章主要為大家詳細(xì)介紹了Java如何通過時(shí)間獲取8位驗(yàn)證碼(每?jī)蓚€(gè)小時(shí)生成一個(gè)),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1.需求

要求是很簡(jiǎn)單的,每個(gè)驗(yàn)證碼的有效時(shí)間是2小時(shí),這個(gè)并不是收到驗(yàn)證碼開始計(jì)時(shí)的,而是每個(gè)兩小時(shí)的時(shí)間段使用的是相同的驗(yàn)證碼。

2.代碼實(shí)現(xiàn)

2.1 依賴

<dependency>
	<groupId>gov.nist.math</groupId>
	<artifactId>jama</artifactId>
	<version>1.0.3</version>
</dependency>

<dependency>
	<groupId>commons-codec</groupId>
	<artifactId>commons-codec</artifactId>
	<version>1.6</version>
</dependency>

2.2 時(shí)間參數(shù)處理方法

將2個(gè)小時(shí)處理為相同的值:

@Slf4j
public class VerificationCodeUtil {

    /**
     * 時(shí)間字符串
     *
     * @param dateStr yyyy-MM-dd HH:mm:ss
     */
    public static String getCode(String dateStr) {
        int dataStrLength = 13;
        try {
            if (dateStr.length() >= dataStrLength) {
                String yearMonthDay = dateStr.substring(0, 10);
                int hour = Integer.parseInt(dateStr.substring(11, 13));
                int twoHour = 2;
                if (hour % twoHour != 0) {
                    hour--;
                }
                String md5Str = DigestUtils.md5Hex("vc#" + yearMonthDay + hour);
                return getCodeByMd5(md5Str);
            } else {
                log.error("dateStr [{}] not match format [yyyy-MM-dd HH:mm:ss]!", dateStr);
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("dateStr [{}] not match format [yyyy-MM-dd HH:mm:ss]!", dateStr);
        }
        return dateStr;
    }
}

2.3 截取驗(yàn)證碼方法

@Slf4j
public class VerificationCodeUtil {
    // 對(duì)指定字符串生成驗(yàn)證碼
    private static String getCodeByMd5(String md5Str) {
        try {
            byte[] md5 = md5Str.getBytes();
            double[][] preMatrix = new double[4][8];
            for (int j = 0; j < 4; j++) {
                for (int k = 0; k < 8; k++) {
                    preMatrix[j][k] = md5[j * 8 + k];
                }
            }
            Matrix matrix = new Matrix(preMatrix);
            Matrix matrix1 = matrix.getMatrix(1, 2, 2, 5);
            Matrix matrix2 = matrix.transpose();
            Matrix matrix21 = matrix2.getMatrix(0, 3, 0, 3);
            Matrix matrix22 = matrix2.getMatrix(4, 7, 0, 3);
            Matrix matrix3 = matrix21.plus(matrix22);
            Matrix result = matrix1.times(matrix3);

            double[][] re = result.getArray();
            StringBuilder str = new StringBuilder();
            for (double[] doubles : re) {
                for (double aDouble : doubles) {
                    int a = (int) aDouble % 16;
                    str.append(Integer.toHexString(a));
                }
            }
            return str.toString().toUpperCase();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

2.4 驗(yàn)證方法

@Slf4j
public class VerificationCodeUtil {
    public static void main(String[] args) {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        DateTime parse = DateUtil.parse("2023-11-09 23:59:59", "yyyy-MM-dd HH:mm:ss");
        String format = df.format(parse);
        System.out.println(getCode(format));
        // 00:00 3A756DFC
        // 00:59 3A756DFC
        // 01:59 3A756DFC
        // 01:59 3A756DFC
        // 02:00 9E937D4B
        // 02:59 9E937D4B
        // 03:00 9E937D4B
        // 22:00 D014DD79
        // 23:59 D014DD79        
    }
}

3.總結(jié)

很簡(jiǎn)單的算法分享。優(yōu)點(diǎn):

  • 不需要將生成的驗(yàn)證碼緩存。
  • 時(shí)間入?yún)?,能夠重?fù)獲取相同的值。

以上就是Java實(shí)現(xiàn)通過時(shí)間獲取8位驗(yàn)證碼的詳細(xì)內(nèi)容,更多關(guān)于Java獲取驗(yàn)證碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Linux系統(tǒng)卸載重裝JDK的完整流程

    Linux系統(tǒng)卸載重裝JDK的完整流程

    Linux系統(tǒng)有時(shí)候會(huì)默認(rèn)使用OpenJDK版本,需要卸載后重新安裝自己需要的JDK版本,下面這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)卸載重裝JDK的完整流程,需要的朋友可以參考下
    2024-02-02
  • Java全面細(xì)致講解Cookie與Session及kaptcha驗(yàn)證碼的使用

    Java全面細(xì)致講解Cookie與Session及kaptcha驗(yàn)證碼的使用

    web開發(fā)階段我們主要是瀏覽器和服務(wù)器之間來進(jìn)行交互。瀏覽器和服務(wù)器之間的交互就像人和人之間進(jìn)行交流一樣,但是對(duì)于機(jī)器來說,在一次請(qǐng)求之間只是會(huì)攜帶著本次請(qǐng)求的數(shù)據(jù)的,但是可能多次請(qǐng)求之間是會(huì)有聯(lián)系的,所以提供了會(huì)話機(jī)制
    2022-06-06
  • 使用SpringBoot生成war包的流程步驟

    使用SpringBoot生成war包的流程步驟

    一般情況下,在SpringBoot項(xiàng)目開發(fā)完成進(jìn)行服務(wù)器部署時(shí),都是打成JAR包進(jìn)行部署運(yùn)行的,但是在有些情況下也需要將其打成War包使用Tomcat進(jìn)行部署,本篇文章就簡(jiǎn)單介紹一下SpringBoot如何打成War包,需要的朋友可以參考下
    2024-10-10
  • ElasticSearch學(xué)習(xí)之Es索引Api操作

    ElasticSearch學(xué)習(xí)之Es索引Api操作

    這篇文章主要為大家介紹了ElasticSearch學(xué)習(xí)之Es索引Api操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • SpringCloud使用Ribbon實(shí)現(xiàn)負(fù)載均衡的流程步驟

    SpringCloud使用Ribbon實(shí)現(xiàn)負(fù)載均衡的流程步驟

    在微服務(wù)架構(gòu)中,負(fù)載均衡是一項(xiàng)關(guān)鍵的技術(shù),它可以確保各個(gè)服務(wù)節(jié)點(diǎn)間的負(fù)載分布均勻,提高整個(gè)系統(tǒng)的穩(wěn)定性和性能,Spring Cloud 中的 Ribbon 就是一種負(fù)載均衡的解決方案,本文將深入探討 Ribbon 的原理和在微服務(wù)中的應(yīng)用,需要的朋友可以參考下
    2024-02-02
  • 解決Java?API不能遠(yuǎn)程訪問HBase的問題

    解決Java?API不能遠(yuǎn)程訪問HBase的問題

    這篇文章主要介紹了解決Java?API不能遠(yuǎn)程訪問HBase的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringMvc切換Json轉(zhuǎn)換工具的操作代碼

    SpringMvc切換Json轉(zhuǎn)換工具的操作代碼

    SpringBoot切換使用goolge的Gson作為SpringMvc的Json轉(zhuǎn)換工具,本文給大家講解SpringMvc切換Json轉(zhuǎn)換工具的操作代碼,感興趣的朋友一起看看吧
    2024-02-02
  • Java常用字符串方法小結(jié)

    Java常用字符串方法小結(jié)

    字符串變量是Java與C語(yǔ)言的一大不同之處。Java之中的 String 類和 Stringbuffer 類提供了大量的對(duì)字符串操作的方法。String 類適合處理較小的字符串,而Stringbuffer類適合處理大量字符串
    2017-04-04
  • idea debug沒有force step into的問題解決

    idea debug沒有force step into的問題解決

    本文主要介紹了IDEA Debug中ForceStepInto按鈕消失的問題及解決方法,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • Spring?Boot項(xiàng)目獲取resources目錄下文件并返回給前端的方案

    Spring?Boot項(xiàng)目獲取resources目錄下文件并返回給前端的方案

    我們?cè)陧?xiàng)目中經(jīng)常碰到需要讀取固定文件的場(chǎng)景,如模板文件,一般做法是將文件放在resources目錄下,程序通過多種方式可以順利讀取文件,這篇文章主要給大家介紹了關(guān)于Spring?Boot項(xiàng)目獲取resources目錄下文件并返回給前端的相關(guān)資料,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

和田县| 即墨市| 乌审旗| 丰原市| 电白县| 托克托县| 察隅县| 循化| 阿尔山市| 长武县| 柞水县| 绥德县| 牟定县| 若尔盖县| 恩施市| 即墨市| 盘锦市| 昂仁县| 航空| 工布江达县| 囊谦县| 炉霍县| 璧山县| 望江县| 健康| 东方市| 台安县| 达尔| 上思县| 绥芬河市| 财经| 定陶县| 丹凤县| 繁昌县| 裕民县| 慈溪市| 浦北县| 称多县| 满洲里市| 邹城市| 沙雅县|