当前位置:首页 > JavaScript

js登录验证码实现

2026-01-30 20:09:08JavaScript

验证码生成与显示

使用HTML5 Canvas生成图形验证码,通过随机生成字符和干扰元素增强安全性。以下为基本实现代码:

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

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

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

  // 添加干扰线
  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();
  }

  return captchaText;
}

验证码刷新功能

为验证码添加点击刷新功能,提升用户体验:

document.getElementById('captchaCanvas').addEventListener('click', function() {
  currentCaptcha = generateCaptcha();
});

let currentCaptcha = generateCaptcha();

表单验证逻辑

在表单提交时验证用户输入的验证码:

document.getElementById('loginForm').addEventListener('submit', function(e) {
  e.preventDefault();
  const userInput = document.getElementById('captchaInput').value.trim();

  if (userInput.toUpperCase() !== currentCaptcha.toUpperCase()) {
    alert('验证码错误,请重新输入');
    currentCaptcha = generateCaptcha();
    return false;
  }

  // 验证通过后继续登录流程
  this.submit();
});

服务端验证增强

虽然前端验证可提升用户体验,但必须结合服务端验证:

// Node.js示例(使用Express框架)
app.post('/login', (req, res) => {
  const { username, password, captcha } = req.body;
  const sessionCaptcha = req.session.captcha;

  if (!captcha || captcha.toUpperCase() !== sessionCaptcha.toUpperCase()) {
    return res.status(400).json({ error: '验证码错误' });
  }

  // 清除已使用的验证码
  delete req.session.captcha;

  // 继续验证用户名密码...
});

安全性优化措施

采取以下措施提升验证码安全性:

  • 设置验证码有效期(如5分钟)
  • 限制单位时间内验证尝试次数
  • 使用更复杂的变形验证码(扭曲、旋转字符)
  • 考虑使用第三方验证码服务如reCAPTCHA

移动端适配方案

针对移动设备优化验证码体验:

// 响应式调整验证码大小
function adjustCaptchaSize() {
  const canvas = document.getElementById('captchaCanvas');
  if (window.innerWidth < 768) {
    canvas.width = 120;
    canvas.height = 40;
  } else {
    canvas.width = 150;
    canvas.height = 50;
  }
  generateCaptcha();
}

window.addEventListener('resize', adjustCaptchaSize);
adjustCaptchaSize();

无障碍访问支持

为视障用户提供语音验证码选项:

js登录验证码实现

function speakCaptcha() {
  const utterance = new SpeechSynthesisUtterance(currentCaptcha.split('').join(' '));
  window.speechSynthesis.speak(utterance);
}

以上实现方案可根据实际需求进行调整,建议在重要场景结合短信验证码或生物识别等多因素认证方式。

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

相关文章

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…