当前位置:首页 > JavaScript

js实现登录验证码

2026-04-04 09:43:40JavaScript

实现登录验证码的步骤

生成随机验证码

验证码通常由数字、字母或组合构成,使用Math.random()生成随机字符。以下是一个生成4位数字验证码的示例:

js实现登录验证码

function generateCaptcha() {
  const captchaLength = 4;
  let captcha = '';
  for (let i = 0; i < captchaLength; i++) {
    captcha += Math.floor(Math.random() * 10);
  }
  return captcha;
}
const currentCaptcha = generateCaptcha();

渲染验证码到页面

将生成的验证码显示在页面上,可通过Canvas或纯文本实现。以下是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 = '#000';
  ctx.fillText(captchaText, 10, 30);
}
renderCaptcha(currentCaptcha);

验证用户输入

在提交表单时比对用户输入与生成的验证码:

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

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

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

添加刷新功能

提供验证码刷新按钮以提升用户体验:

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

完整HTML结构示例

<div>
  <canvas id="captchaCanvas" width="120" height="40"></canvas>
  <button id="refreshCaptcha">刷新验证码</button>
</div>
<input type="text" id="captchaInput" placeholder="输入验证码">

增强安全性建议

  • 服务端二次验证:即使前端验证通过,仍需在服务器端再次校验验证码有效性
  • 设置有效期:验证码应在生成后2-5分钟内失效
  • 限制尝试次数:防止暴力破解,超过3次错误需重新生成
  • 使用库生成复杂验证码:如svg-captcha库可生成图形扭曲的验证码

注意事项

  • 避免纯数字验证码:建议混合大小写字母增加复杂度
  • 禁用右键查看元素:防止通过DOM获取验证码内容
  • 考虑无障碍访问:为视觉障碍用户提供语音验证码备选方案

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

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现自举

js实现自举

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