12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /**
- * 验证码工具类
- * 用于生成和验证验证码
- */
- 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;
|