当前位置:首页 > JavaScript

js 实现验证码

2026-01-16 12:33:15JavaScript

实现验证码的 JavaScript 方法

生成随机验证码

验证码通常由随机字符(数字、字母或混合)组成。以下代码生成一个 6 位随机验证码(数字和字母混合):

function generateCaptcha() {
  const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  let captcha = '';
  for (let i = 0; i < 6; i++) {
    captcha += chars.charAt(Math.floor(Math.random() * chars.length));
  }
  return captcha;
}

渲染验证码到页面

将生成的验证码渲染到 HTML 元素中,通常结合 Canvas 实现图形化效果以增强安全性:

js 实现验证码

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

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

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

验证用户输入

用户提交表单时,验证输入的验证码是否匹配:

js 实现验证码

function validateCaptcha(input, storedCaptcha) {
  return input.toLowerCase() === storedCaptcha.toLowerCase();
}

完整示例

HTML 结构:

<canvas id="captchaCanvas" width="200" height="50"></canvas>
<input type="text" id="captchaInput" placeholder="输入验证码">
<button onclick="refreshCaptcha()">刷新</button>
<button onclick="checkCaptcha()">验证</button>

JavaScript 逻辑:

let currentCaptcha = generateCaptcha();

// 初始化渲染
renderCaptcha(currentCaptcha);

// 刷新验证码
function refreshCaptcha() {
  currentCaptcha = generateCaptcha();
  renderCaptcha(currentCaptcha);
}

// 验证逻辑
function checkCaptcha() {
  const userInput = document.getElementById('captchaInput').value;
  if (validateCaptcha(userInput, currentCaptcha)) {
    alert('验证码正确');
  } else {
    alert('验证码错误');
    refreshCaptcha();
  }
}

增强安全性措施

  1. 添加噪声干扰:在 Canvas 绘制时增加随机噪点或扭曲变形。
  2. 限制尝试次数:记录用户验证失败次数,超过阈值后锁定或延长等待时间。
  3. 服务端二次验证:即使前端验证通过,仍需在服务器端再次校验。

服务器端集成示例(Node.js)

// 存储生成的验证码(实际应用中应使用Session或Redis)
const captchaStore = {};

app.get('/captcha', (req, res) => {
  const captcha = generateCaptcha();
  captchaStore[req.sessionID] = captcha;
  res.json({ captchaImage: generateCaptchaImage(captcha) });
});

app.post('/verify', (req, res) => {
  if (req.body.captcha === captchaStore[req.sessionID]) {
    res.json({ success: true });
  } else {
    res.status(400).json({ error: 'Invalid captcha' });
  }
});

注意事项

  • 避免使用纯前端验证作为唯一安全措施
  • 定期更新验证码生成算法
  • 考虑无障碍访问,提供语音验证码选项
  • 移动端适配时注意触摸交互体验

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

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现轮播

js实现轮播

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

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js类实现

js类实现

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