当前位置:首页 > JavaScript

js验证码实现

2026-04-03 22:52:02JavaScript

验证码实现方法

前端生成验证码

使用Canvas绘制随机验证码,包含数字、字母及干扰线。示例代码:

js验证码实现

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

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

  // 绘制验证码文本
  ctx.font = '30px Arial';
  ctx.fillStyle = '#000';
  ctx.fillText(captchaText, 10, 30);

  // 添加干扰线
  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.strokeStyle = `rgb(${Math.random() * 255},${Math.random() * 255},${Math.random() * 255})`;
    ctx.stroke();
  }

  return captchaText;
}

// 初始化验证码
const currentCaptcha = generateCaptcha();

验证码校验逻辑

在表单提交时进行验证码比对:

js验证码实现

document.getElementById('submitBtn').addEventListener('click', function() {
  const userInput = document.getElementById('captchaInput').value;
  if (userInput.toLowerCase() !== currentCaptcha.toLowerCase()) {
    alert('验证码错误');
    generateCaptcha(); // 刷新验证码
    return false;
  }
  // 继续提交表单
});

服务端验证方案

对于安全性要求高的场景,应结合后端验证:

  1. 前端生成验证码时,同时将验证码文本通过加密方式发送到服务端存储(如Session)
  2. 提交表单时将用户输入和Session存储的验证码进行比对
  3. 每次验证后立即清除Session中的验证码

增强安全性措施

  • 限制验证码有效时间(如5分钟过期)
  • 记录验证失败次数,达到阈值后锁定账号
  • 使用更复杂的图形验证码(如滑动拼图、点选文字等)
  • 考虑接入第三方验证服务(如reCAPTCHA)

可访问性优化

  • 提供语音验证码选项
  • 添加验证码刷新按钮
  • 确保验证码有足够的颜色对比度
  • 为Canvas添加替代文本说明

以上方案可根据实际需求组合使用,前端验证适合简单场景,关键业务必须结合服务端验证。

标签: 验证码js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…