图形验证码,是一种常见的验证用户身份的方法,它通过向用户展示一组不易被机器破解的图形,告诉用户只有真正的人类才能够正确地输入这些图形所代表的内容,从而确保网站和应用程序安全性的同时,也保护用户的隐私和数据不被恶意利用。
在Web开发中,Javascript已经成为一种不可或缺的语言,因为它能够让我们以交互式和动态的方式创造出各种不同的应用。而Javascript图形验证码正是其中的一种示例,它通过一系列代码实现对图形验证码的生成和验证。下面我们就来了解一下如何使用Javascript创建一个图形验证码。
// 生成随机数函数 function random(min, max) { return Math.floor(Math.random() * (max - min) + min); } // 生成指定长度的随机字符串 function generateRandomCode(length) { let code = ''; const CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; const CHARSET_LENGTH = CHARSET.length; for (let i = 0; i< length; i++) { code += CHARSET.charAt(random(0, CHARSET_LENGTH)); } return code; } // 创建并渲染图形验证码 function createCaptcha() { let canvas = document.querySelector("#captcha"); let ctx = canvas.getContext("2d"); let width = canvas.width; let height = canvas.height; // 背景颜色 ctx.fillStyle = "#f6f6f6"; ctx.fillRect(0, 0, width, height); // 干扰线 for (let i = 0; i< 20; i++) { let startX = random(0, width); let startY = random(0, height); let endX = random(0, width); let endY = random(0, height); let color = "#" + generateRandomCode(6); ctx.beginPath(); ctx.moveTo(startX, startY); ctx.lineTo(endX, endY); ctx.strokeStyle = color; ctx.stroke(); } // 随机字符串 let code = generateRandomCode(6); let fontSize = width / (code.length + 1); let fontX = fontSize / 2; for (let i = 0; i< code.length; i++) { let color = "#" + generateRandomCode(6); ctx.font = `${fontSize}px Arial`; ctx.fillStyle = color; ctx.fillText(code.charAt(i), fontX, height / 2 + fontSize / 2); fontX += fontSize; } // 返回验证码 return code; }
上述代码中,我们首先定义了一个生成随机数的函数和一个生成指定长度的随机字符串的函数,然后定义了一个创建并渲染图形验证码的函数。其中,我们使用了HTML5中的Canvas元素来创建画布,并通过Canvas API来绘制出背景、干扰线和随机字符串等图形。随后,我们返回生成的随机字符串,作为后续验证的依据。
// 验证图形验证码 function validateCaptcha(code) { let inputCode = document.querySelector("#input-captcha").value.toLowerCase(); inputCode = inputCode.replace(/\s/g, ''); if (inputCode === '') { alert('请输入验证码!'); return false; } else if (inputCode !== code.toLowerCase()) { alert('验证码输入错误!'); return false; } alert('验证码输入正确!'); return true; }
除了生成验证码之外,我们还需要验证用户的输入,以确保输入的验证码和生成的验证码一致。上述代码中,我们定义了一个验证图形验证码的函数,该函数首先获取用户输入的验证码,并进行格式化和比较,如果出现错误,会提示用户,并阻止表单提交。否则,提示用户输入正确,并继续表单提交。
最后,我们还需要将生成验证码和验证图形验证码的函数和HTML页面进行绑定。
// 绑定生成验证码函数 let captchaStr = createCaptcha(); let createBtn = document.querySelector("#create-captcha"); createBtn.addEventListener("click", function() { captchaStr = createCaptcha(); }); // 绑定验证验证码函数 let validateBtn = document.querySelector("#validate-captcha"); validateBtn.addEventListener("click", function() { validateCaptcha(captchaStr); });
上述代码中,我们定义了两个事件监听器,分别用来绑定生成验证码和验证图形验证码的函数。当用户点击生成验证码按钮时,会重新生成验证码,并将其赋值给一个变量。当用户点击验证验证码按钮时,会将当前生成的验证码作为参数传递给验证函数,进行比较和提示。
通过上述代码,我们已经成功地实现了一个基本的Javascript图形验证码,并将其集成到一个输入验证的过程中。