国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java【算法 05】通過時間獲取8位驗證碼(每兩個小時生成一個)源碼分享

這篇具有很好參考價值的文章主要介紹了Java【算法 05】通過時間獲取8位驗證碼(每兩個小時生成一個)源碼分享。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.需求

要求是很簡單的,每個驗證碼的有效時間是2小時,這個并不是收到驗證碼開始計時的,而是每個兩小時的時間段使用的是相同的驗證碼。

2.代碼實現(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ù)處理方法

2個小時處理為相同的值

@Slf4j
public class VerificationCodeUtil {

    /**
     * 時間字符串
     *
     * @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 截取驗證碼方法

@Slf4j
public class VerificationCodeUtil {
    // 對指定字符串生成驗證碼
    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 驗證方法

@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.總結

很簡單的算法分享。優(yōu)點:文章來源地址http://www.zghlxwxcb.cn/news/detail-755628.html

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

到了這里,關于Java【算法 05】通過時間獲取8位驗證碼(每兩個小時生成一個)源碼分享的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【Flink】FlinkCDC獲取mysql數(shù)據(jù)時間類型差8小時時區(qū)解決方案

    【Flink】FlinkCDC獲取mysql數(shù)據(jù)時間類型差8小時時區(qū)解決方案

    1、背景: 在我們使用FlinkCDC采集mysql數(shù)據(jù)的時候,日期類型是我們很常見的類型,但是FlinkCDC讀取出來會和數(shù)據(jù)庫的日期時間不一致,情況如下 FlinkCDC獲取的數(shù)據(jù)中create_time字段1694597238000轉換為時間戳2023-09-13 17:27:18 ?而數(shù)據(jù)庫中原始數(shù)據(jù)如下,并沒有到下午5點,這就導致了

    2024年02月07日
    瀏覽(25)
  • 獲取兩個時間段之間的年月

    ?//獲取兩個時間段之間的年月 ? ? ? ? getMonthBetween(start,end){ ? ? ? ? ? ? ? var result = []; ? ? ? ? ? ? ? var s = start.split(\\\"-\\\"); ? ? ? ? ? ? ? var e = end.split(\\\"-\\\"); ? ? ? ? ? ? ? var min = new Date(); ? ? ? ? ? ? ? var max = new Date(); ? ? ? ? ? ? ? min.setFullYear(s[0],s[1]); ? ? ? ? ?

    2024年03月21日
    瀏覽(22)
  • python 通過SMSActivateAPI 如何獲取驗證碼

    api文檔 https://sms-activate.org/cn/api2 要使用SMSActivateAPI庫從sms-activate.org獲取驗證碼,您需要按照以下步驟進行: 1 訪問sms-activate.org并注冊一個帳戶。 2 充值您的帳戶以獲得短信驗證碼。sms-activate.org為您提供了各種付款方式,包括信用卡、PayPal和加密貨幣。 3 安裝SMSActivateAPI庫。

    2024年02月01日
    瀏覽(17)
  • Oracle 時間多少秒以后 oracle interval 多少分鐘之前 Oracle日期1小時后 Java時間多少秒以后 Java日期多少天之前

    Oracle 時間多少秒以后 oracle interval 多少分鐘之前 Oracle日期1小時后 Java時間多少秒以后 Java日期多少天之前

    ????????在項目開發(fā)中,遇到一個類似于 超時關閉的訂單(超過1分鐘后關閉訂單) 的需求,在數(shù)據(jù)的時間寫入時,用的數(shù)據(jù)庫系統(tǒng)的時間函數(shù) SYSDATE , 而在處理超時時間時,用的是 JAVA應用程序時間處理。 在代碼評審環(huán)節(jié),大佬們給出的意見時,萬一出現(xiàn)時間不一致的

    2024年02月15日
    瀏覽(22)
  • Java進行計算兩個時間間隔

    在Java中,我們經常需要計算兩個時間之間的間隔,比如計算某個任務的執(zhí)行時間、計算兩個事件發(fā)生的時間間隔等等。Java提供了一些類和方法來處理時間和日期相關的操作,本文將介紹如何使用Java來計算兩個時間之間的間隔,并提供相應的代碼示例。 1. 基本概念 在開始之

    2024年04月15日
    瀏覽(16)
  • GEE:在地圖區(qū)域添加點擊事件,以獲取兩個影像集合某點的時間序列,用于對比和分析

    作者:CSDN @ _養(yǎng)樂多_ 本文將介紹在Google Earth Engine(GEE)平臺上的地圖顯示區(qū)域創(chuàng)建一個交互式界面,可以給用戶提供點擊一個點在左側面板上顯示該點的影像集合的時間序列的功能。該方法已經被封裝成了一個函數(shù),可以直接調用。 調用代碼如下所示, 結果如下圖所示,

    2024年02月13日
    瀏覽(27)
  • java計算兩個時間相差天數(shù)的方法

    方法1: 通過Calendar類的日期比較。注意:這里需要考慮一下: 日期是跨年份的,如一個是2012年,一個是2015年的 年份是分閏年和平年的,各自的天數(shù)不同 /** ? * date2比date1多的天數(shù) ? * @param date1? ? * @param date2 ? * @return? ? */ ? public static int differentDays(Date date1,Date date2) ? {

    2023年04月20日
    瀏覽(28)
  • STM 如何通過網(wǎng)絡 time.windows.com獲取時間

    在STM32中,你可以使用STM32Cube HAL庫提供的網(wǎng)絡套接字API來通過網(wǎng)絡獲取時間。以下是一個示例代碼,演示如何通過time.windows.com獲取時間:

    2024年02月14日
    瀏覽(18)
  • java 獲取兩個List集合的交集

    可以使用Java中的retainAll方法來獲取兩個List的交集: 假設有兩個List類型的集合list1和list2,代碼如下: 下面是獲取兩個集合的交集的代碼: 輸出結果為: 其中,retainAll方法會修改intersection集合,使其只包含兩個集合的交集。在這個例子中,intersection集合最初是包含list1集合的

    2024年02月11日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包