当前位置:首页 > JavaScript

js实现登录验证码

2026-03-01 09:04:50JavaScript

实现登录验证码的步骤

生成验证码

使用Canvas绘制随机验证码,包含数字、字母或混合字符。以下是一个生成4位随机验证码的示例:

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

  const canvas = document.getElementById('captchaCanvas');
  const ctx = canvas.getContext('2d');
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.font = '30px Arial';
  ctx.fillStyle = '#000';
  ctx.fillText(captcha, 10, 30);

  return captcha;
}

存储验证码

将生成的验证码存储在变量或sessionStorage中,用于后续验证:

js实现登录验证码

let currentCaptcha = generateCaptcha();

// 或者使用sessionStorage
sessionStorage.setItem('captcha', currentCaptcha);

验证用户输入

在提交表单时比较用户输入的验证码和存储的验证码:

js实现登录验证码

function validateCaptcha() {
  const userInput = document.getElementById('captchaInput').value;
  const storedCaptcha = sessionStorage.getItem('captcha');

  if (userInput.toUpperCase() !== storedCaptcha) {
    alert('验证码错误');
    currentCaptcha = generateCaptcha();
    return false;
  }
  return true;
}

刷新验证码

提供刷新验证码的功能:

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

HTML结构示例

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

增强安全性措施

  • 添加干扰线和噪点
  • 限制验证码尝试次数
  • 设置验证码有效期
// 添加干扰线
function addNoise(ctx) {
  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()*120, Math.random()*40);
    ctx.lineTo(Math.random()*120, Math.random()*40);
    ctx.stroke();
  }
}

服务器端验证

虽然前端验证可以提高用户体验,但必须配合服务器端验证:

// 伪代码示例
app.post('/login', (req, res) => {
  if (req.body.captcha !== req.session.captcha) {
    return res.status(400).send('验证码错误');
  }
  // 继续登录流程
});

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

相关文章

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现瀑布流

js实现瀑布流

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

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…