当前位置:首页 > JavaScript

js实现登录验证码

2026-01-30 18:01:02JavaScript

实现登录验证码的步骤

生成随机验证码

使用JavaScript生成随机验证码字符串,通常包含数字和字母组合。可以定义一个函数来生成指定长度的验证码:

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

在页面上显示验证码

将生成的验证码显示在HTML页面上,通常使用canvas绘制验证码图像以增加安全性:

function drawCaptcha(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 = '#000';
  ctx.textAlign = 'center';
  ctx.fillText(captchaText, canvas.width/2, canvas.height/2 + 10);
}

验证用户输入

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

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

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

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

刷新验证码功能

提供刷新验证码的功能,增强用户体验:

function refreshCaptcha() {
  const newCaptcha = generateCaptcha();
  sessionStorage.setItem('captcha', newCaptcha);
  drawCaptcha(newCaptcha);
  document.getElementById('captchaInput').value = '';
}

HTML结构示例

配套的HTML结构可以这样设计:

<form id="loginForm">
  <input type="text" placeholder="用户名" required>
  <input type="password" placeholder="密码" required>

  <div class="captcha-container">
    <canvas id="captchaCanvas" width="150" height="50"></canvas>
    <button type="button" onclick="refreshCaptcha()">刷新</button>
  </div>

  <input type="text" id="captchaInput" placeholder="输入验证码" required>
  <button type="submit">登录</button>
</form>

初始化验证码

页面加载时初始化验证码:

window.onload = function() {
  const initialCaptcha = generateCaptcha();
  sessionStorage.setItem('captcha', initialCaptcha);
  drawCaptcha(initialCaptcha);
};

安全增强措施

为提高验证码安全性,可以考虑以下措施:

  • 服务器端二次验证,即使前端验证通过也应在后端再次检查
  • 限制验证码尝试次数,防止暴力破解
  • 添加时间限制,验证码在一定时间后失效
  • 使用更复杂的验证码生成算法,如扭曲文本或动态变化

注意事项

  • 避免直接将验证码文本显示在页面上,应使用canvas绘制
  • 验证码应存储在sessionStorage而非localStorage中,关闭浏览器后自动清除
  • 验证码长度建议4-6位,过长会影响用户体验
  • 考虑添加无障碍访问支持,如为视力障碍用户提供音频验证码选项

js实现登录验证码

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

相关文章

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url,…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置…

js类实现

js类实现

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

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 fun…

js实现vue路由

js实现vue路由

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

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: In…