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

验证码功能也是在各大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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值