HTML验证码是一种常见的网站安全措施,用于防止恶意用户通过自动化程序进行攻击,它通常由一组随机生成的数字和字母组成,用户需要正确输入这些字符才能完成某个操作,如登录、注册等,本文将详细介绍如何使用HTML和JavaScript制作一个简单的验证码。
1、准备工作
在开始制作验证码之前,我们需要准备以下内容:
- 一张包含数字和字母的图片,作为验证码的背景图片。
- 一个JavaScript文件,用于生成验证码图片和验证用户输入的验证码。
- 一个HTML文件,用于显示验证码图片和输入框,以及引入JavaScript文件。
2、创建HTML文件
我们创建一个HTML文件,用于显示验证码图片和输入框,在文件中添加以下代码:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>验证码示例</title> <style> .captcha { display: inline-block; margin-bottom: 10px; } </style> </head> <body> <div class="captcha"> <img id="captchaImage" src="captcha_bg.jpg" alt="验证码" onclick="refreshCaptcha()"> <input type="text" id="captchaInput" placeholder="请输入验证码"> <button onclick="checkCaptcha()">提交</button> </div> <script src="captcha.js"></script> </body> </html>
在这个文件中,我们定义了一个名为captcha
的div
容器,用于显示验证码图片和输入框,我们还定义了一个名为captchaImage
的img
标签,用于显示验证码图片;一个名为captchaInput
的input
标签,用于接收用户输入的验证码;以及一个名为refreshCaptcha
的按钮,用于刷新验证码图片,我们引入了名为captcha.js
的JavaScript文件。
3、创建JavaScript文件
接下来,我们创建一个名为captcha.js
的JavaScript文件,用于生成验证码图片和验证用户输入的验证码,在文件中添加以下代码:
const captchaImage = document.getElementById('captchaImage');
const captchaInput = document.getElementById('captchaInput');
const captchaBg = 'captcha_bg.jpg'; // 验证码背景图片路径
const captchaLength = 4; // 验证码长度
let captchaCode = ''; // 验证码字符集
let captchaCountdown; // 验证码倒计时
// 生成验证码图片和字符集
function generateCaptcha() {
captchaCode = '';
for (let i = 0; i < captchaLength; i++) {
let charCode = Math.floor(Math.random() * 36); // 生成0-9之间的随机数字
if (charCode < 10) {
charCode = String.fromCharCode(charCode + '0'); // 将数字转换为字符
} else {
charCode = String.fromCharCode(charCode + 'A'.charCodeAt() - 10); // 将数字转换为大写字母
}
captchaCode += charCode; // 将字符添加到验证码字符集中
}
captchaImage.src = ${captchaBg}(${captchaCode}).png
; // 更新验证码图片的URL
}
// 刷新验证码图片和字符集(模拟服务器端生成新的验证码)
function refreshCaptcha() {
clearTimeout(captchaCountdown); // 清除倒计时计时器(如果有)
generateCaptcha(); // 重新生成验证码图片和字符集
setCaptchaCountdown(); // 设置倒计时计时器(如果有)
}
// 设置验证码倒计时(模拟服务器端要求用户在一定时间内输入验证码)
function setCaptchaCountdown() {
captchaCountdown = setTimeout(() => {
alert('验证码已过期,请刷新页面后重新获取'); // 如果用户未在规定时间内输入验证码,弹出提示信息并刷新页面
location.reload(); // 刷新页面以重新获取验证码图片和字符集
}, 60 * 1000); // 设置倒计时时间为60秒(1分钟)
}
// 验证用户输入的验证码是否正确(模拟服务器端验证用户输入的验证码)
function checkCaptcha() {
clearTimeout(captchaCountdown); // 清除倒计时计时器(如果有)
if (captchaInput.value === captchaCode) { // 如果用户输入的验证码与服务器端生成的验证码相同,表示验证成功
alert('验证成功!'); // 弹出提示信息表示验证成功
} else { // 如果用户输入的验证码与服务器端生成的验证码不同,表示验证失败
alert('验证失败,请重新输入!'); // 弹出提示信息表示验证失败,并要求用户重新输入验证码
refreshCaptcha(); // 刷新验证码图片和字符集,以便用户重新输入验证码
setCaptchaCountdown(); // 设置倒计时计时器(如果有)
}
}
在这个文件中,我们首先获取了HTML文件中定义的captchaImage
、captchaInput
元素,以及验证码背景图片路径、验证码长度等变量,我们定义了三个函数:generateCaptcha()
用于生成验证码图片和字符集;refreshCaptcha()
用于刷新验证码图片和字符集;setCaptchaCountdown()
用于设置验证码倒计时,我们定义了两个事件处理函数:checkCaptcha()
用于验证用户输入的验证码是否正确;onload()
用于在页面加载时生成初始的验证码图片和字符集。