当前位置: 首页 > news >正文

Java【算法 05】通过时间获取8位验证码(每两个小时生成一个)源码分享

通过时间获取验证码

  • 1.需求
  • 2.代码实现
    • 2.1 依赖
    • 2.2 时间参数处理方法
    • 2.3 截取验证码方法
    • 2.4 验证方法
  • 3.总结

1.需求

要求是很简单的,每个验证码的有效时间是2小时,这个并不是收到验证码开始计时的,而是每个两小时的时间段使用的是相同的验证码。

2.代码实现

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 时间参数处理方法

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.总结

很简单的算法分享。优点:

  • 不需要将生成的验证码缓存。
  • 时间入参,能够重复获取相同的值。

相关文章:

Java【算法 05】通过时间获取8位验证码(每两个小时生成一个)源码分享

通过时间获取验证码 1.需求2.代码实现2.1 依赖2.2 时间参数处理方法2.3 截取验证码方法2.4 验证方法 3.总结 1.需求 要求是很简单的&#xff0c;每个验证码的有效时间是2小时&#xff0c;这个并不是收到验证码开始计时的&#xff0c;而是每个两小时的时间段使用的是相同的验证…...

微服务 Spring Cloud 5,一图说透Spring Cloud微服务架构

目录 一、域名系统DNS二、LVS&#xff08;Linux Virtual Server&#xff09;,Linux虚拟服务器三、CDN静态资源四、Nginx反向代理服务器1、Nginx的主要作用体现在以下几个方面&#xff1a;2、Nginx静态资源服务和CDN静态资源服务&#xff0c;如何选择&#xff1f; 五、Gateway网…...

conda清华源安装cuda12.1的pytorch

使用pytorch官方提供的conda command奇慢无比&#xff0c;根本装不下来&#xff08;科学的情况下也这样&#xff09; 配置一下清华源使用清华源装就好了 清华源&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ 配置方法&#xff1a;conda config --…...

安徽首届道医传承十八绝技发布会在合肥成功举办

近日&#xff0c;在安徽合肥举行了首届道医传承十八绝技发布会&#xff0c;本次会议由安徽渡罗门生物科技有限公司、北京道武易医文化传播有限公司、楼观台道医文化研究院联合举办。现场吸引了来自全国各地民族医学领域的专家学者参与讨论与交流。本次会议旨在促进道医的交流与…...

一款功能强大的web目录扫描器专业版

dirpro 简介 dirpro 是一款由 python 编写的目录扫描器&#xff0c;操作简单&#xff0c;功能强大&#xff0c;高度自动化。 自动根据返回状态码和返回长度&#xff0c;对扫描结果进行二次整理和判断&#xff0c;准确性非常高。 已实现功能 可自定义扫描线程 导入url文件进…...

【Linux网络】网卡配置与修改主机名,做好基础系统配置

目录 一、网络配置命令 1、查看网卡信息ifconfig Linux永久修改ip地址 2、主机名修改 ①hostname 临时修改主机名 ②永久修改主机名 第一种&#xff0c;使用命令修改 第二种&#xff1a;修改配置文件 3、路由信息 再来拓展一下&#xff0c;永久修改路由表信息 4、检查…...

三大基础排序 -选择排序、冒泡排序、插入排序

排序算法 文章目录 冒泡排序算法步骤动图代码优化总结 选择排序算法步骤动图代码总结 插入排序算法步骤动图代码总结 排序算法&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。一般默认排序是按照由小到大即…...

el-form添加自定义校验规则校验el-input只能输入数字

0 效果 1 代码 {1,5}是用来限制小数点后几位的 addFormRules: {investAmount: [{ validator: checkInvestAmount, trigger: blur }], }, const checkInvestAmount (rule, value, callback) > {if (value ! && value ! null && value ! undefined) {if (/…...

ios 开发问题小集 [持续更新]

文章目录 一、如何给列表上的UITableViewCell添加手势二、获取NSIndexPath的方式2.1 根据row, section 来创建2.2 根据point 的位置来找到 indexPath三、tableView在Grouped样式下,设置表头表尾空白一、如何给列表上的UITableViewCell添加手势 给cell添加手势,大家都会这么做…...

idea Plugins 搜索不到插件

Settings — System Settings — HTTP Proxy&#xff0c;打开HTTP Proxy 页面&#xff0c;设置自动发现代理&#xff1a; 勾选Atuto-detect proxy settings&#xff0c;勾选Automatic proxy configuration URL&#xff0c;输入&#xff1a; https://plugins.jetbrains.com/id…...

三相电机的某些实测特性曲线

三相电机参数&#xff1a; 0.75KW&#xff0c;额定电流是2A&#xff0c;功率因数0.71&#xff0c;效率78.9%。制式S1. 1.负载不变时的线电压与线电流的关系 1.1相关数据与python代码&#xff1a; 这里记录了一系列的实验&#xff1a; 第一组实验&#xff1a;近乎空载&#xf…...

Essential C++ 面向对象4.1 ~ 5.4

个人认为&#xff0c;结合网上对《Essential c》的评论&#xff0c;它不适合初学者&#xff1a; &#xff08;1&#xff09;过于精炼&#xff0c;很多内容不会细讲 &#xff08;2&#xff09;中文版翻译较生硬&#xff0c;逻辑不够连贯清晰 &#xff08;3&#xff09;课后作业有…...

数组【数据结构与算法】

什么是线性表&#xff1f;什么是非线性表&#xff1f;什么是数组&#xff1f;数组如何实现根据下标随机访问数组元素&#xff1f;为什么数组从下标0开始&#xff0c;不从下标1开始&#xff1f; 什么是线性表&#xff1f; 数据结构元素只有前后关系。 线性表包括&#xff1a;数…...

Python克隆单个网页

网上所有代码都无法完全克隆单个网页&#xff0c;不是Css&#xff0c;Js下载不下来就是下载下来也不能正常显示&#xff0c;只能自己写了&#xff0c;记得点赞~ 效果如图&#xff1a; 源码与所需的依赖&#xff1a; pip install requests pip install requests beautifulsoup4…...

电脑硬盘数据恢复哪个好?值得考虑的 8 个硬盘恢复软件解决方案

借助硬盘恢复软件&#xff0c;任何人都可以在家中恢复丢失的文件&#xff0c;而无需任何特殊技能。事实上&#xff0c;最困难的一步是选择最佳解决方案&#xff0c;因为可用选项的数量可能有点多。幸运的是&#xff0c;这篇文章可以为您提供帮助。 8 款顶级硬盘数据恢复软件解决…...

第二十三节——路由守卫

一、概念 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中&#xff1a;全局的, 单个路由独享的, 或者组件级的。简单理解&#xff1a;导航守卫就是路由跳转过程中的一些钩子函数&#xff0c;再直白点路由跳转是一个大的过程&#xff0c;这…...

在gitlab中的使用kaniko打造流水线

文章目录 kaniko工具介绍环境说明系统版本组件版本组件部署参考链接 部署harbor下载解压、创建相关目录配置部署 gitlab集成harbor集成项目ci配置最终结果 kaniko工具介绍 kaniko 是一种从容器或 Kubernetes 集群内的 Dockerfile 构建容器镜像的工具。 kaniko 解决了使用 Doc…...

【C语言 | 预处理】C语言预处理详解(一) —— #define、#under、#if、#else、#elif、#endif、#include、#error

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

19、Flink 的Table API 和 SQL 中的自定义函数及示例(2)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

(动手学习深度学习)第7章 残差网络---ResNet

目录 ResNet总结 ResNet代码实现ResNet的梯度计算 ResNet 总结 残差块使得很深的网络更加容易训练 甚至可以训练一千层的网络 残差网络对随后的深层神经网络设计产生了深远影响&#xff0c;无论是卷积类网络还是全连接类网络。 ResNet代码实现 导入相关库 import torch fro…...

修车师傅的‘清码’秘籍:用UDS 0x14服务清除AutoSar ECU故障码的完整流程与实战避坑

修车师傅的‘清码’秘籍&#xff1a;用UDS 0x14服务清除AutoSar ECU故障码的完整流程与实战避坑 在汽车电子诊断领域&#xff0c;故障码&#xff08;DTC&#xff09;的清除操作看似简单&#xff0c;实则暗藏玄机。许多维修技师和诊断工程师都曾遇到过这样的困惑&#xff1a;为什…...

ABC选择思维:为什么中间价位总是最好卖

有一个卖净水器的商家&#xff0c;产品售价1680元。但每次顾客都要犹豫很久&#xff0c;因为不清楚这个价位是贵还是便宜。 后来&#xff0c;商家做了这样一个调整&#xff1a;引进一款低端净水器售价980元&#xff0c;一款高端净水器售价2980元。三款产品同时销售。 结果神奇的…...

基于libexpat的C语言XML流式解析实战:从原理到高性能应用

1. libexpat为何成为XML解析的首选利器 第一次接触XML解析是在十年前的一个物联网网关项目里&#xff0c;当时需要处理每秒上千条的传感器数据流。尝试过DOM解析器后&#xff0c;内存直接爆涨到2GB——这就是我遇见libexpat的契机。这个用纯C编写的小巧库&#xff0c;能在10MB内…...

别再只用@input了!UniApp搜索框实战:实时联想与回车确认的完整交互方案

UniApp搜索框交互进阶&#xff1a;实时联想与回车确认的工程实践 在移动应用开发中&#xff0c;搜索功能看似简单&#xff0c;实则暗藏玄机。一个优秀的搜索交互需要平衡实时响应与性能消耗&#xff0c;兼顾用户体验与系统资源。本文将带你深入UniApp搜索框的进阶实践&#xff…...

Equalizer APO:Windows音频调校的终极解决方案

Equalizer APO&#xff1a;Windows音频调校的终极解决方案 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo 你是否曾经对Windows系统的音频输出感到不满意&#xff1f;无论是音乐欣赏时的平淡音质&#…...

VSCode工业调试配置文件.yaml泄露导致产线停机?紧急发布《工业级settings.json安全加固白皮书》(含SCADA系统隔离策略模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode工业适配调试的安全危机构型全景 在工业控制系统&#xff08;ICS&#xff09;、边缘网关与嵌入式设备的远程协同调试场景中&#xff0c;VSCode 通过 Remote-SSH、Dev Containers 及自定义 Debug …...

别再只用cv2.split了!用NumPy切片拆分OpenCV图像通道,速度更快还省内存

别再只用cv2.split了&#xff01;用NumPy切片拆分OpenCV图像通道&#xff0c;速度更快还省内存 在图像处理领域&#xff0c;通道拆分是最基础却高频的操作之一。许多开发者习惯性地使用cv2.split()&#xff0c;却不知道这个看似简单的操作背后隐藏着性能陷阱。当处理高分辨率图…...

HALCON图像与OpenCV/Numpy互转实战:打通Python视觉算法流水线的关键一步

HALCON图像与OpenCV/Numpy互转实战&#xff1a;打通Python视觉算法流水线的关键一步 工业视觉领域长期存在一个技术痛点&#xff1a;HALCON在传统机器视觉算法上的卓越性能与OpenCV/PyTorch等通用框架难以无缝协作。我曾在一个半导体缺陷检测项目中&#xff0c;需要将HALCON的亚…...

多用户环境下的eCapture权限管控:从风险到解决方案

多用户环境下的eCapture权限管控&#xff1a;从风险到解决方案 【免费下载链接】ecapture Capturing SSL/TLS plaintext without a CA certificate using eBPF. Supported on Linux/Android kernels for amd64/arm64. 项目地址: https://gitcode.com/GitHub_Trending/ec/ecap…...

别再只用QChart了!用QtDataVisualization给你的Qt应用做个炫酷的3D数据看板(附完整源码)

突破平面限制&#xff1a;用QtDataVisualization打造专业级3D数据可视化看板 在数据驱动的时代&#xff0c;如何让枯燥的数字变得生动直观&#xff1f;传统2D图表已无法满足现代应用对数据呈现的高要求。本文将带您深入QtDataVisualization模块&#xff0c;从基础架构到高级技巧…...