当前位置:首页 > JavaScript

js如何实现验证码

2026-01-30 20:03:06JavaScript

生成验证码

使用Math.random()生成随机数,转换为字符串后截取指定位数。例如生成4位数字验证码:

const code = Math.floor(Math.random() * 9000) + 1000;

绘制图形验证码

通过Canvas API绘制包含干扰元素的图形验证码:

js如何实现验证码

function generateCaptcha() {
  const canvas = document.getElementById('captcha');
  const ctx = canvas.getContext('2d');
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  // 生成随机字符串
  const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
  let captcha = '';
  for (let i = 0; i < 4; i++) {
    captcha += chars.charAt(Math.floor(Math.random() * chars.length));
  }

  // 绘制背景和文字
  ctx.fillStyle = '#f3f3f3';
  ctx.fillRect(0, 0, canvas.width, canvas.height);
  ctx.font = '24px Arial';
  ctx.fillStyle = '#333';
  ctx.fillText(captcha, 10, 25);

  // 添加干扰线
  ctx.strokeStyle = '#ccc';
  for (let i = 0; i < 5; i++) {
    ctx.beginPath();
    ctx.moveTo(Math.random() * canvas.width, Math.random() * canvas.height);
    ctx.lineTo(Math.random() * canvas.width, Math.random() * canvas.height);
    ctx.stroke();
  }

  return captcha;
}

验证逻辑实现

将生成的验证码存储在变量或SessionStorage中,提交时进行比对:

let storedCaptcha = generateCaptcha(); // 初始化验证码

document.getElementById('verify-btn').addEventListener('click', () => {
  const userInput = document.getElementById('captcha-input').value;
  if (userInput === storedCaptcha) {
    alert('验证成功');
  } else {
    alert('验证码错误');
    storedCaptcha = generateCaptcha(); // 刷新验证码
  }
});

短信/邮件验证码

使用定时器实现60秒倒计时功能:

js如何实现验证码

let countdown = 60;
const timer = setInterval(() => {
  countdown--;
  document.getElementById('sms-btn').innerText = `${countdown}s`;
  if (countdown <= 0) {
    clearInterval(timer);
    document.getElementById('sms-btn').innerText = '获取验证码';
    document.getElementById('sms-btn').disabled = false;
  }
}, 1000);

安全性增强措施

建议将验证码有效期设置为5分钟,服务端进行二次验证:

// 服务端存储示例(Node.js)
const captchaMap = new Map();

function generateServerCaptcha() {
  const code = Math.random().toString(36).substr(2, 6).toUpperCase();
  captchaMap.set(code, {
    code,
    expires: Date.now() + 300000 // 5分钟过期
  });
  return code;
}

实际项目中应考虑:

  • 验证码时效性控制
  • 大小写敏感处理
  • 防止暴力破解的频率限制
  • 重要操作需配合其他验证方式

分享给朋友:

相关文章

vue实现验证码

vue实现验证码

Vue 实现验证码的方法 使用 Canvas 生成图形验证码 安装依赖(如需要): npm install vue-canvas-verify --save 创建验证码组件: <te…

vue如何实现放大缩小

vue如何实现放大缩小

Vue 实现放大缩小功能 在 Vue 中实现放大缩小功能可以通过多种方式实现,以下介绍几种常见的方法: 使用 CSS transform 缩放 通过绑定 CSS 的 transform: scale…

vue如何实现mvvm

vue如何实现mvvm

Vue 的 MVVM 实现原理 Vue 通过数据绑定和响应式系统实现 MVVM(Model-View-ViewModel)模式。其核心在于将数据模型(Model)与视图(View)通过 ViewMod…

vue如何实现单选

vue如何实现单选

使用原生 HTML 单选按钮 在 Vue 中可以直接使用 HTML 的原生单选按钮,通过 v-model 绑定数据。 <template> <div>…

java如何实现多态

java如何实现多态

多态的概念 多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时,可以产生不同的行为。Java中主要通过方法重写(Override)和接口/抽象类实现多态。 实现…

java如何实现异步

java如何实现异步

Java实现异步的方法 Java中实现异步编程可以通过多种方式,每种方式适用于不同的场景和需求。以下是常见的实现方法: 使用Thread类 创建新线程执行异步任务是最基础的方式。通过继承Thread…