当前位置:首页 > JavaScript

js实现简单的验证码

2026-04-05 02:21:02JavaScript

实现简单验证码的步骤

生成随机验证码

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

function generateCaptcha() {
  const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  let captcha = '';
  for (let i = 0; i < 6; i++) {
    const randomIndex = Math.floor(Math.random() * chars.length);
    captcha += chars[randomIndex];
  }
  return captcha;
}

渲染验证码到页面

使用 Canvas 绘制验证码,增加干扰线或噪点提高安全性:

function drawCaptcha(captchaText) {
  const canvas = document.getElementById('captchaCanvas');
  const ctx = canvas.getContext('2d');
  ctx.clearRect(0, 0, canvas.width, canvas.height);

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

  // 绘制验证码文本
  ctx.font = '30px Arial';
  ctx.fillStyle = '#000';
  ctx.fillText(captchaText, 10, 30);

  // 添加干扰线
  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();
  }
}

验证用户输入

比较用户输入与生成的验证码(不区分大小写):

function validateCaptcha(inputValue, storedCaptcha) {
  return inputValue.toLowerCase() === storedCaptcha.toLowerCase();
}

完整示例

HTML 结构:

<canvas id="captchaCanvas" width="200" height="50"></canvas>
<input type="text" id="captchaInput" placeholder="输入验证码">
<button id="refreshCaptcha">刷新</button>
<button id="submitCaptcha">提交</button>
<p id="captchaResult"></p>

JavaScript 逻辑:

js实现简单的验证码

let currentCaptcha = generateCaptcha();

document.addEventListener('DOMContentLoaded', () => {
  drawCaptcha(currentCaptcha);

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

  document.getElementById('submitCaptcha').addEventListener('click', () => {
    const userInput = document.getElementById('captchaInput').value;
    const resultElement = document.getElementById('captchaResult');

    if (validateCaptcha(userInput, currentCaptcha)) {
      resultElement.textContent = '验证成功!';
      resultElement.style.color = 'green';
    } else {
      resultElement.textContent = '验证失败,请重试!';
      resultElement.style.color = 'red';
      currentCaptcha = generateCaptcha();
      drawCaptcha(currentCaptcha);
    }
  });
});

增强安全性建议

  • 服务端二次验证:前端验证可被绕过,重要操作需在服务端再次验证
  • 增加过期时间:设置验证码有效期(如5分钟)
  • 限制尝试次数:防止暴力破解
  • 使用更复杂图形:扭曲文字、背景干扰等

这种方法实现了基础的前端验证码功能,适合简单场景使用。对于高安全需求,建议结合后端验证机制。

标签: 验证码简单
分享给朋友:

相关文章

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

vue简单的列表实现

vue简单的列表实现

实现简单的 Vue 列表 在 Vue 中实现列表功能通常使用 v-for 指令。以下是一个基础的列表实现示例: <template> <div> <…

简单的vue实现原理

简单的vue实现原理

Vue 的实现原理 Vue 的核心实现原理主要包括响应式系统、虚拟 DOM 和模板编译。以下是这些核心概念的简要说明: 响应式系统 Vue 通过 Object.defineProperty(Vue…

react 简单table实现

react 简单table实现

基础表格实现 使用 React 实现简单表格可以通过原生 HTML 的 <table> 标签结合动态数据渲染完成。以下是一个基础示例,展示如何通过数组数据动态生成表格内容: impo…

react实现简单拖拽功能

react实现简单拖拽功能

实现拖拽功能的核心步骤 使用React实现拖拽功能主要依赖HTML5的Drag and Drop API,结合React的状态管理。以下是核心实现方法: 设置可拖拽元素 为需要拖拽的元素添加drag…