当前位置:首页 > JavaScript

js实现验证码

2026-01-12 13:01:35JavaScript

使用Canvas生成图形验证码

在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。

<canvas id="captcha" width="120" height="40"></canvas>
<button onclick="generateCaptcha()">刷新验证码</button>
function generateCaptcha() {
    const canvas = document.getElementById('captcha');
    const ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, canvas.width, canvas.height);

    // 生成随机4位验证码(数字+字母)
    const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    let captcha = '';
    for (let i = 0; i < 4; i++) {
        const index = Math.floor(Math.random() * chars.length);
        captcha += chars[index];
    }

    // 绘制验证码文本
    ctx.font = '24px Arial';
    ctx.fillStyle = '#333';
    ctx.fillText(captcha, 10, 25);

    // 添加干扰线
    for (let i = 0; i < 3; 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();
    }

    // 存储验证码用于验证
    window.currentCaptcha = captcha;
}

实现验证逻辑

在表单提交时比较用户输入与生成的验证码是否匹配。

document.getElementById('submit-btn').addEventListener('click', function() {
    const userInput = document.getElementById('captcha-input').value.toUpperCase();
    if (userInput === window.currentCaptcha) {
        alert('验证码正确');
    } else {
        alert('验证码错误');
        generateCaptcha(); // 刷新验证码
    }
});

增加滑动验证码

通过滑块拖动完成验证的方式更友好。

<div class="slider-container">
    <div class="slider-track"></div>
    <div class="slider-thumb"></div>
    <div class="slider-mask"></div>
</div>
let isVerified = false;
const thumb = document.querySelector('.slider-thumb');
const mask = document.querySelector('.slider-mask');
const maxWidth = document.querySelector('.slider-track').offsetWidth;

thumb.addEventListener('mousedown', function(e) {
    document.addEventListener('mousemove', moveHandler);
    document.addEventListener('mouseup', upHandler);
});

function moveHandler(e) {
    let newLeft = e.clientX - thumb.parentElement.getBoundingClientRect().left;
    newLeft = Math.max(0, Math.min(newLeft, maxWidth));
    thumb.style.left = mask.style.width = newLeft + 'px';

    // 到达终点验证
    if (Math.abs(newLeft - maxWidth) < 5) {
        isVerified = true;
        thumb.textContent = '✓';
    }
}

function upHandler() {
    document.removeEventListener('mousemove', moveHandler);
    if (!isVerified) {
        thumb.style.left = mask.style.width = '0';
    }
}

使用第三方库简化开发

推荐使用以下成熟验证码库:

  • canvas-captcha: 轻量级Canvas验证码生成器
  • slider-captcha: 滑动拼图验证组件
  • google-recaptcha: Google官方验证服务

安装示例:

npm install canvas-captcha

使用示例:

js实现验证码

const Captcha = require('canvas-captcha');
const captcha = new Captcha();
document.getElementById('captcha-image').src = captcha.dataURL;

标签: 验证码js
分享给朋友:

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

php实现验证码的识别

php实现验证码的识别

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

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…