当前位置:首页 > JavaScript

js实现简单的验证码

2026-03-02 01:30:43JavaScript

生成随机验证码

使用Math.random()生成随机字符或数字组合,可自定义长度和字符集:

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

渲染验证码到页面

通过Canvas绘制带干扰线的验证码,增强安全性:

function renderCaptcha(captchaText, canvasId) {
  const canvas = document.getElementById(canvasId);
  const ctx = canvas.getContext('2d');

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

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

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

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

验证用户输入

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

js实现简单的验证码

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

完整实现示例

HTML部分:

<canvas id="captchaCanvas" width="200" height="60"></canvas>
<input type="text" id="userInput" placeholder="输入验证码">
<button onclick="checkCaptcha()">验证</button>
<button onclick="refreshCaptcha()">刷新</button>
<p id="result"></p>

JavaScript部分:

js实现简单的验证码

let currentCaptcha = generateCaptcha();

// 初始化验证码
window.onload = function() {
  renderCaptcha(currentCaptcha, 'captchaCanvas');
};

// 刷新验证码
function refreshCaptcha() {
  currentCaptcha = generateCaptcha();
  renderCaptcha(currentCaptcha, 'captchaCanvas');
  document.getElementById('userInput').value = '';
  document.getElementById('result').textContent = '';
}

// 验证用户输入
function checkCaptcha() {
  const userInput = document.getElementById('userInput').value;
  const isValid = validateCaptcha(userInput, currentCaptcha);
  document.getElementById('result').textContent = isValid 
    ? '验证成功' 
    : '验证失败';
}

增强安全性措施

验证码应存储在服务端Session中,前端实现仅作为辅助验证。实际项目中建议:

  • 结合后端生成和验证
  • 添加时效性限制(如5分钟过期)
  • 限制尝试次数防止暴力破解
  • 使用更复杂的图形干扰元素

可访问性考虑

为方便视障用户,可提供音频验证码选项:

function speakCaptcha(captchaText) {
  const utterance = new SpeechSynthesisUtterance(captchaText.replace(/(\d)/g, '$1 '));
  window.speechSynthesis.speak(utterance);
}

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

相关文章

vue 简单实现

vue 简单实现

Vue 简单实现 Vue 是一个渐进式 JavaScript 框架,适合快速构建用户界面。以下是实现一个简单 Vue 应用的步骤: 安装 Vue 通过 CDN 引入 Vue 是最简单的方式: &…

实现简单vue

实现简单vue

实现一个简单的 Vue 框架 数据响应式系统 通过 Object.defineProperty 实现数据劫持,监听数据变化: function defineReactive(obj, key, v…

vue简单实现

vue简单实现

Vue 简单实现步骤 安装 Vue.js 最新版本: npm install vue@latest 创建 Vue 实例: import { createApp } from 'vue' co…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

vue修改简单实现

vue修改简单实现

Vue 修改简单实现 在 Vue 中实现简单的修改操作,通常涉及数据绑定、方法调用和响应式更新。以下是几种常见场景的实现方式: 修改数据并更新视图 Vue 的响应式系统会自动追踪数据变化并更新视图。…

vue简单实现picker效果

vue简单实现picker效果

Vue 实现 Picker 效果 在 Vue 中实现 Picker 效果可以通过自定义组件或使用第三方库完成。以下是两种常见方法: 自定义滚动选择器 使用原生滚动行为实现 Picker 效果,适用…