当前位置:首页 > JavaScript

js实现图片验证码

2026-02-28 19:11:22JavaScript

实现图片验证码的步骤

生成随机验证码文本

使用Math.random()和字符串拼接生成随机字符组合,通常包含数字和字母:

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

创建Canvas绘制验证码

利用HTML5 Canvas API绘制带有干扰元素的验证码图片:

function createCaptcha() {
  const canvas = document.getElementById('captchaCanvas');
  const ctx = canvas.getContext('2d');
  const code = generateRandomCode();

  // 清除画布
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  // 绘制背景色
  ctx.fillStyle = '#f5f5f5';
  ctx.fillRect(0, 0, canvas.width, canvas.height);

  // 绘制验证码文本
  ctx.font = '30px Arial';
  ctx.fillStyle = '#333';
  ctx.textAlign = 'center';
  ctx.textBaseline = 'middle';
  ctx.fillText(code, canvas.width/2, canvas.height/2);

  // 添加干扰线
  for (let i = 0; i < 5; i++) {
    ctx.strokeStyle = getRandomColor();
    ctx.beginPath();
    ctx.moveTo(Math.random() * canvas.width, Math.random() * canvas.height);
    ctx.lineTo(Math.random() * canvas.width, Math.random() * canvas.height);
    ctx.stroke();
  }

  // 添加干扰点
  for (let i = 0; i < 50; i++) {
    ctx.fillStyle = getRandomColor();
    ctx.beginPath();
    ctx.arc(
      Math.random() * canvas.width,
      Math.random() * canvas.height,
      1,
      0,
      2 * Math.PI
    );
    ctx.fill();
  }

  return code;
}

function getRandomColor() {
  const r = Math.floor(Math.random() * 256);
  const g = Math.floor(Math.random() * 256);
  const b = Math.floor(Math.random() * 256);
  return `rgb(${r},${g},${b})`;
}

HTML结构示例

需要准备Canvas元素和刷新按钮:

<canvas id="captchaCanvas" width="150" height="50"></canvas>
<button id="refreshCaptcha">刷新验证码</button>
<input type="text" id="userInput" placeholder="输入验证码">
<button id="verifyBtn">验证</button>

初始化与验证逻辑

页面加载时初始化验证码,并设置事件监听:

let currentCode = '';

document.addEventListener('DOMContentLoaded', () => {
  currentCode = createCaptcha();

  document.getElementById('refreshCaptcha').addEventListener('click', () => {
    currentCode = createCaptcha();
  });

  document.getElementById('verifyBtn').addEventListener('click', () => {
    const userInput = document.getElementById('userInput').value;
    if (userInput.toUpperCase() === currentCode) {
      alert('验证成功');
    } else {
      alert('验证失败');
      currentCode = createCaptcha();
    }
  });
});

进阶优化方向

增加字母大小写转换处理,在验证时统一转为大写或小写比较

// 修改验证逻辑
if (userInput.toUpperCase() === currentCode.toUpperCase()) {
  // 验证通过
}

添加验证码过期时间,通过localStorage或服务端记录生成时间

js实现图片验证码

// 存储生成时间
localStorage.setItem('captchaTime', Date.now());

// 验证时检查是否过期(如5分钟)
const generateTime = localStorage.getItem('captchaTime');
if (Date.now() - generateTime > 300000) {
  alert('验证码已过期');
}

安全注意事项

前端验证仅作为用户体验优化,重要操作必须结合服务端验证 避免直接将验证码文本返回前端,建议通过加密token或会话存储 对于高安全性场景,建议使用专业验证码服务如reCAPTCHA

标签: 验证码图片
分享给朋友:

相关文章

vue2实现图片懒加载

vue2实现图片懒加载

实现图片懒加载的方法 在Vue2中实现图片懒加载可以通过以下方法完成,核心原理是监听图片是否进入可视区域,再动态加载图片资源。 使用IntersectionObserver API Intersec…

vue实现图片

vue实现图片

Vue 实现图片展示的方法 在 Vue 中实现图片展示可以通过多种方式完成,以下是一些常见的方法: 使用 img 标签直接引入 通过 img 标签的 src 属性直接引入本地或远程图片: <…

vue实现展示图片

vue实现展示图片

在 Vue 中展示图片的方法 静态图片展示 静态图片通常存放在项目的 public 或 assets 目录下。使用 img 标签直接引用。 <template> <img sr…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

vue实现生成图片

vue实现生成图片

Vue 实现生成图片的方法 使用 html2canvas 库 html2canvas 是一个流行的库,可以将 DOM 元素转换为 Canvas,进而生成图片。适用于 Vue 项目。 安装 html2…

vue实现图片列表

vue实现图片列表

实现图片列表的基本方法 在Vue中实现图片列表可以通过v-for指令遍历图片数据数组,结合<img>标签动态绑定src属性。以下是基本实现步骤: <template> &…