当前位置:首页 > 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绘制带有干扰元素的验证码图片:

js实现图片验证码

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>

初始化与验证逻辑

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

js实现图片验证码

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或服务端记录生成时间

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

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

安全注意事项

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

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

相关文章

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public 或…

Vue实现图片 放大

Vue实现图片 放大

Vue实现图片放大功能 使用v-viewer插件 安装v-viewer插件: npm install v-viewer 在main.js中引入并配置: import Viewer from 'v-…

实现图片旋转js

实现图片旋转js

使用CSS transform属性旋转图片 通过CSS的transform属性可以轻松实现图片旋转。以下是一个简单的示例代码: const image = document.getElement…

jquery图片放大

jquery图片放大

jQuery图片放大实现方法 使用jQuery实现图片放大功能可以通过多种方式完成,以下是几种常见且实用的方法: 使用jQuery Zoom插件 jQuery Zoom插件是一个轻量级的库,专门用于…

vue实现图片验证

vue实现图片验证

Vue 实现图片验证码 使用 Canvas 生成验证码图片 在 Vue 中可以通过 Canvas 动态生成验证码图片。创建一个组件,利用 Canvas 绘制随机字符和干扰线。 <templat…

vue实现图片切图

vue实现图片切图

图片切图的基本实现方法 在Vue中实现图片切图通常涉及将一张大图分割成多个小图,并在页面上以特定方式展示。可以通过CSS和Vue的动态绑定来实现这一功能。 使用CSS的background-posi…