TIME2026-05-18 15:25:03

parpar账号接码网[684W]

搜索
热点
新闻分类
友情链接
首页 > 资讯 > Java实现短信验证码是否超时
资讯
Java实现短信验证码是否超时
2025-06-22IP属地 美国0

在Java中实现短信验证码的超时检查可以通过多种方式完成。以下是一个简单的示例,使用Java的Timer和ScheduledExecutorService来检查验证码是否超时。假设验证码的有效期为5分钟。

Java实现短信验证码是否超时

我们需要一个存储验证码的类,例如SmsCode类,其中包含验证码和生成时间,我们可以使用HashMap来存储这些验证码和对应的用户信息,然后我们可以设置一个定时任务来检查验证码是否过期,如果验证码过期,我们可以从存储中删除它。

这是一个简单的实现示例:

Java实现短信验证码是否超时

import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
public class SmsCodeManager {
    private static final int EXPIRE_TIME = 5; // 设置验证码过期时间(分钟)
    private Map<String, SmsCode> codeMap = new HashMap<>(); // 存储验证码和用户信息的映射表
    private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); // 创建定时任务执行器
    private AtomicLong lastCheckTime = new AtomicLong(); // 记录上次检查时间,用于判断是否需要检查超时
    public void addSmsCode(String userId, String code) {
        SmsCode smsCode = new SmsCode();
        smsCode.setCode(code);
        smsCode.setCreateTime(new Date()); // 获取当前时间作为创建时间
        codeMap.put(userId, smsCode); // 将验证码和用户信息存入映射表
        // 检查是否需要启动定时任务检查超时,如果距离上次检查已经超过五分钟则启动任务,否则不启动(避免频繁启动任务)
        if (System.currentTimeMillis() - lastCheckTime.get() > TimeUnit.MINUTES.toMillis(EXPIRE_TIME)) {
            lastCheckTime.set(System.currentTimeMillis()); // 更新上次检查时间
            scheduler.scheduleAtFixedRate(this::checkExpire, 0, TimeUnit.MINUTES, EXPIRE_TIME); // 启动定时任务检查超时,每隔五分钟执行一次任务,首次执行延迟为0秒(立即执行)
        }
    }
    private void checkExpire() { // 检查验证码是否超时的任务方法
        for (SmsCode code : codeMap.values()) { // 遍历所有验证码和用户信息映射关系
            Date now = new Date(); // 获取当前时间
            if (now.before(code.getCreateTime().getTime() + TimeUnit.MINUTES.toMillis(EXPIRE_TIME))) { // 判断是否超过有效期时间(当前时间小于创建时间加上五分钟)
                codeMap.remove(code); // 如果超过有效期则删除该验证码和用户信息映射关系(即删除该验证码)
            }
        }
    }
}

在这个例子中,我们使用了ScheduledExecutorService来定期执行检查任务,每次添加新的验证码时,我们会检查是否需要启动定时任务检查超时,如果距离上次检查已经超过五分钟,我们会启动定时任务并设置下次执行的时间为五分钟后的时间点,在定时任务的执行方法中,我们会遍历所有的验证码和用户信息映射关系,检查每个验证码是否超过有效期,如果超过有效期,我们会删除该验证码和用户信息的映射关系,这样我们就实现了短信验证码的超时检查功能。