使用js制作一个验证码功能

本文介绍了一个简单的HTML和JavaScript实现的验证码功能。通过生成随机字符串并绘制在canvas上,结合线条和小点增加干扰,实现了验证码的生成。同时,代码中包含点击刷新验证码和验证输入是否正确的功能。
摘要由CSDN通过智能技术生成

验证码功能也是在各大app及网页中都能遇到的小功能,非常实用也非常有趣,写出来以后也是很好理解,下面就是一个特别基础的验证码功能实例。

代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<!-- <style type="text/css">
* {
margin: 0;
padding: 0;
}
body{
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
.wrap{
text-align: center;
width: 200px;
height: 200px;
}
#myCanvas{
border: 1px solid #ccc;
}
.Canvas{
text-align: center;
}
.btn{
margin-top: 10px;
width: 80px;
height: 30px;
border: 0;
border-radius: 5px;
background: rgb(84,58,183);
color: #fff;
}
#val{
margin: 10px 0;
}
</style> -->
</head>
<body>

<div class="wrap">
<div class="Canvas">
<canvas id="myCanvas" width="122" height="40"></canvas>
</div>

<input type="text" id="val">
<button class="btn">验证</button>
</div>

<script type="text/javascript">
// 获取随机字符串函数
function randomString(len) {
//如果没有传递参数  默认是 5
len = len || 5;
//从这里随机 抽取
let chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabacdefg1234567890";
//获取字符串长度
let maxPos = chars.length;
//存储生成汉的验证码字符串
let val = '';
//循环
for (let i = 0; i < len; i++) {
// charsAt 返回字符串中的  某个位置 的字符  传递的参数是 字符串的 位置 数字
// Math.random()获取一个 0~1 的数字 包括小数
val += chars.charAt(Math.random() * maxPos);
}
return val;
}
// console.log(randomString());
//获取随机颜色函数
function randomColor() {
let r = Math.floor(Math.random() * 255);
let g = Math.floor(Math.random() * 255);
let b = Math.floor(Math.random() * 255);

return "rgb(" + r + ", " + b + "," + r + ")";
}
// console.log(randomColor());
//获取 canvas 元素
const c = document.querySelector('#myCanvas');
//获取随机字符
let letifcation = randomString();
//canvas 验证 填充函数
function cav() {
//随机验证码字符串
letifcation = randomString();
//获取canvas 的宽度
const cxtwith = c.offsetWidth;
//获取canvas 的高度
const cxtheight = c.offsetHeight;
//创建画布
const ctx = c.getContext('2d');
//重置画布
ctx.clearRect(0, 0, cxtwith, cxtheight);
//字体颜色;
ctx.fillStyle = '#FF0000';
//字体的大小 和 字体类型
ctx.font = '35px Arial';
//填充
ctx.fillText(letifcation, 10, 25);
//验证码上显示的线条
for (let i = 0; i <= 5; i++) {
ctx.strokeStyle = randomColor()
//起始点
ctx.beginPath();
//移动到指定位置 不创建 路径
ctx.moveTo(Math.random() * cxtwith, Math.random() * cxtheight);
//创建一个新的起点
ctx.lineTo(Math.random() * cxtwith, Math.random() * cxtheight);
//填充
ctx.stroke();
}
//验证码上显示的小点
for (let i = 0; i <= 30; i++) {
ctx.strokeStyle = randomColor();
//起始点
ctx.beginPath();
let x = Math.random() * cxtwith;
let y = Math.random() * cxtheight;
//移动
ctx.moveTo(x, y);
//创建一个新的点
ctx.lineTo(x + 1, y + 1);
//填充
ctx.stroke();
}
}
cav();
//点击 验证码 容器触发
c.addEventListener('click', () => {
// 重新调用
cav();
})
//获取按钮
let btn = document.querySelector('.btn');
//获取文本框
let val = document.querySelector('#val');
//点击按钮 触发
btn.addEventListener('click', () => {
if (val.value != letifcation) {
alert('验证码不正确!');
return
}
alert('验证码正确!');
})
</script>
</body>
</html>

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要在HTML代码中添加一个验证码输入框和一个显示验证码的区域,如下所示: ```html <div class="layui-form-item"> <label class="layui-form-label">验证码</label> <div class="layui-input-inline"> <input type="text" name="verifyCode" placeholder="请输入验证码" class="layui-input"> </div> <div class="layui-input-inline"> <img id="verifyCodeImg" src="验证码生成接口" alt="验证码"> </div> </div> ``` 其中,`verifyCode` 是验证码输入框的 name 属性,`verifyCodeImg` 是显示验证码的 img 标签的 id 属性。在这个例子中,验证码使用一个接口生成的,你也可以自己实现一个验证码生成函数。 然后,在 JavaScript 代码中,你需要使用 layui 的 form 模块和 jQuery 库来处理验证码的验证和刷新。代码如下: ```javascript layui.use(['form'], function () { var form = layui.form; // 点击验证码图片时刷新验证码 $('#verifyCodeImg').click(function() { $(this).attr('src', '验证码生成接口?' + new Date().getTime()); }); // 表单验证 form.verify({ verifyCode: function(value) { if (value.length != 4) { return '验证码长度必须为4位'; } var result; $.ajax({ url: '验证码验证接口', type: 'POST', data: {'verifyCode': value}, async: false, success: function(data) { result = data; } }); if (result != 'true') { return '验证码不正确'; } } }); }); ``` 在这个例子中,`验证码生成接口` 和 `验证码验证接口` 分别是生成验证码和验证验证码的接口地址。当用户点击验证码图片时,会使用一个新的时间戳来刷新验证码。当用户提交表单时,会将验证码的值通过 AJAX 提交到 `验证码验证接口` 进行验证。如果验证码不正确,表单验证会返回错误信息。 注意:以上代码只是一个示例,你需要将其根据你的实际需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值