/** * 验证码工具类 * 用于生成和验证验证码 */ class VerificationCode { constructor() { // 存储验证码的Map,key为验证码,value为过期时间戳 this.codeMap = new Map(); // 验证码有效期(毫秒),默认5分钟 this.expirationTime = 5 * 60 * 1000; } /** * 生成6位数字验证码 * @returns {string} 6位数字验证码 */ generateCode() { // 生成6位随机数 const code = Math.floor(100000 + Math.random() * 900000).toString(); // 设置过期时间 const expirationTime = Date.now() + this.expirationTime; // 存储验证码和过期时间 this.codeMap.set(code, expirationTime); return code; } /** * 验证验证码是否有效 * @param {string} code 要验证的验证码 * @returns {boolean} 验证码是否有效 */ verifyCode(code) { if (!code || !this.codeMap.has(code)) { return false; } const expirationTime = this.codeMap.get(code); const now = Date.now(); // 如果验证码已过期,从Map中删除 if (now > expirationTime) { this.codeMap.delete(code); return false; } // 验证成功后删除验证码(一次性使用) this.codeMap.delete(code); return true; } /** * 设置验证码有效期 * @param {number} minutes 有效期(分钟) */ setExpirationTime(minutes) { this.expirationTime = minutes * 60 * 1000; } /** * 清理过期的验证码 */ clearExpiredCodes() { const now = Date.now(); for (const [code, expirationTime] of this.codeMap.entries()) { if (now > expirationTime) { this.codeMap.delete(code); } } } } // 创建单例实例 const verificationCode = new VerificationCode(); export default verificationCode;