当前位置:首页 > JavaScript

js实现汉字验证码

2026-01-31 09:07:45JavaScript

实现汉字验证码的步骤

生成随机汉字

使用Unicode编码范围生成随机汉字,汉字的Unicode范围大致在\u4e00\u9fa5之间。

function getRandomChinese() {
  const unicode = 0x4e00 + Math.floor(Math.random() * (0x9fa5 - 0x4e00 + 1));
  return String.fromCharCode(unicode);
}

创建验证码字符串

调用上述函数生成指定长度的汉字字符串。

function createCaptcha(length = 4) {
  let captcha = '';
  for (let i = 0; i < length; i++) {
    captcha += getRandomChinese();
  }
  return captcha;
}

渲染验证码到Canvas

使用Canvas绘制验证码,可以添加干扰线、噪点等增强安全性。

function drawCaptcha(canvasId, captcha) {
  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);

  // 绘制文字
  ctx.font = '40px Arial';
  ctx.fillStyle = '#333';
  ctx.textAlign = 'center';
  ctx.textBaseline = 'middle';
  ctx.fillText(captcha, canvas.width / 2, canvas.height / 2);

  // 添加干扰线
  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(input, captcha) {
  return input.trim() === captcha;
}

完整示例

整合上述代码,实现一个完整的汉字验证码功能。

<!DOCTYPE html>
<html>
<head>
  <title>汉字验证码</title>
</head>
<body>
  <canvas id="captchaCanvas" width="200" height="80"></canvas>
  <button id="refreshBtn">刷新</button>
  <input type="text" id="userInput" placeholder="输入验证码">
  <button id="submitBtn">验证</button>
  <p id="result"></p>

  <script>
    let currentCaptcha = createCaptcha();

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

      document.getElementById('refreshBtn').addEventListener('click', () => {
        currentCaptcha = createCaptcha();
        drawCaptcha('captchaCanvas', currentCaptcha);
      });

      document.getElementById('submitBtn').addEventListener('click', () => {
        const userInput = document.getElementById('userInput').value;
        const isValid = validateCaptcha(userInput, currentCaptcha);
        document.getElementById('result').textContent = isValid ? '验证通过' : '验证失败';
      });
    });
  </script>
</body>
</html>

增强安全性

为提高安全性,可以在服务端生成和验证验证码,避免前端被绕过。同时可以增加以下措施:

js实现汉字验证码

  • 限制验证码有效时间
  • 记录验证码尝试次数,防止暴力破解
  • 使用更复杂的干扰元素,如扭曲文字、背景噪点等

通过以上方法可以实现一个基本的汉字验证码功能,适用于网页防机器人提交等场景。

标签: 汉字验证码
分享给朋友:

相关文章

react验证码实现

react验证码实现

验证码生成与验证 在React中实现验证码功能通常涉及生成随机验证码字符串、渲染为图像或文本,并与用户输入进行比对。以下是具体实现方法: 生成随机验证码 使用JavaScript生成随机字符串作为验…

php实现手机验证码

php实现手机验证码

PHP实现手机验证码功能 手机验证码是常见的用户验证方式,通过短信或语音发送验证码到用户手机。以下是在PHP中实现手机验证码功能的步骤: 生成随机验证码 使用PHP的rand()或mt_rand()…

js实现图形验证码

js实现图形验证码

实现图形验证码的步骤 生成随机字符串 使用Math.random()生成包含数字和字母的随机字符串,作为验证码的基础。 function generateRandomString(length) {…

js登录验证码实现

js登录验证码实现

验证码生成与显示 使用HTML5 Canvas生成图形验证码,通过随机生成字符和干扰元素增强安全性。以下为基本实现代码: function generateCaptcha() { const c…

js实现验证码识别

js实现验证码识别

验证码识别的基本思路 验证码识别通常涉及图像处理和机器学习技术。在JavaScript中,可以通过以下方法实现简单的验证码识别: 图像预处理 验证码识别前需要对图像进行预处理,以提高识别准确率。常见…

js实现验证码倒计时

js实现验证码倒计时

实现验证码倒计时功能 验证码倒计时功能通常用于防止用户频繁发送验证码请求。以下是使用JavaScript实现验证码倒计时的方法。 获取验证码按钮 在HTML中添加一个按钮用于触发验证码发送: &l…