当前位置:首页 > 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);
}

验证用户输入

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

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部分:

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分钟过期)
  • 限制尝试次数防止暴力破解
  • 使用更复杂的图形干扰元素

可访问性考虑

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

js实现简单的验证码

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

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

相关文章

vue 实现简单登陆

vue 实现简单登陆

Vue 实现简单登录功能 创建 Vue 项目 使用 Vue CLI 创建一个新项目: vue create login-demo 选择默认配置或手动配置(推荐包含 Vue Router 和 Vuex…

js验证码实现

js验证码实现

验证码的基本原理 验证码(CAPTCHA)用于区分人类用户和自动化程序。常见类型包括图形验证码、滑动验证码、短信验证码等。JavaScript 可用于前端验证码的生成和验证逻辑。 图形验证码实现 使…

vue修改简单实现

vue修改简单实现

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

vue底部导航简单实现

vue底部导航简单实现

使用 Vue Router 实现底部导航 在 Vue 项目中,可以通过 Vue Router 和自定义组件实现底部导航。以下是一个简单的实现示例: 安装 Vue Router(如果尚未安装):…

react实现简单拖拽功能

react实现简单拖拽功能

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

简单css制作

简单css制作

CSS 基础语法 CSS(层叠样式表)用于控制网页的样式和布局。基本语法由选择器和声明块组成: 选择器 { 属性: 值; } 例如: p { color: blue; font-siz…