当前位置:首页 > 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实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现百叶窗

js实现百叶窗

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

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…