当前位置:首页 > JavaScript

js验证码实现

2026-04-03 22:52:02JavaScript

验证码实现方法

前端生成验证码

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

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();

验证码校验逻辑

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

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

服务端验证方案

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

js验证码实现

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

增强安全性措施

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

可访问性优化

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

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

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

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现图片放大缩小

js实现图片放大缩小

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

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…