当前位置:首页 > 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或服务端记录生成时间

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

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

安全注意事项

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

js实现图片验证码

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

相关文章

vue实现图片查看

vue实现图片查看

Vue 实现图片查看功能 在 Vue 中实现图片查看功能,可以通过原生实现或使用第三方库。以下是几种常见的方法: 原生实现方式 使用 Vue 的指令和事件绑定实现基础的图片查看功能。 <te…

网页设计制作css图片

网页设计制作css图片

CSS图片处理基础方法 在网页设计中,CSS可以控制图片的尺寸、位置、边框等样式属性。通过<img>标签或背景图方式引入图片后,使用CSS属性进行调整。 img { width: 1…

vue实现图片预览

vue实现图片预览

实现图片预览功能 在Vue中实现图片预览功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方库如viewer.js或vue-photo-preview,以及自…

Vue实现图片 放大

Vue实现图片 放大

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

php实现获取验证码

php实现获取验证码

使用GD库生成验证码 在PHP中,可以通过GD库来生成验证码图片。以下是一个简单的实现示例: <?php session_start(); $width = 120; $height = 40…

js 实现验证码

js 实现验证码

实现验证码的 JavaScript 方法 生成随机验证码 验证码通常由随机字符(数字、字母或混合)组成。以下代码生成一个 6 位随机验证码(数字和字母混合): function generateCa…