js实现验证码功能

本文介绍了如何使用JavaScript生成和验证验证码。通过创建包含随机字符、颜色和样式的span元素,实现在页面上显示验证码,并在用户输入后进行验证。点击按钮会检查输入的验证码是否与生成的验证码匹配,成功则提示验证成功,失败则提示验证失败,并刷新验证码。
摘要由CSDN通过智能技术生成

前面是拆解着讲的,不想看可以直接跳过,带注释的完整版代码和效果在后面

首先在页面中准备一个输入框,一个显示验证码的盒子和一个提交按钮

提交 1 2 3 4 5 然后加亿些样式 input { width: 150px; height: 30px; outline: none; font-size: 24px; vertical-align: middle; }

button {
outline: none;
vertical-align: middle;
cursor: pointer;
}

div {
display: inline-block;
width: 90px;
height: 40px;
line-height: 40px;
text-align: center;
vertical-align: middle;
background-color: #ddd;
cursor: pointer;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
然后大概长这样(有点丑,不过无所谓,主要内容是js)

好,那么开始写js

首先获取这些元素
var input = document.querySelector(‘input’);
var btn = document.querySelector(‘button’);
var div = document.querySelector(‘div’);
1
2
3
然后搞一个字符库和一个保存验证码的字符串
var characters = “QWETYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890”;
var str;
1
2
那个字符库就直接滚键盘就行了~

因为验证码要多次用到随机数,所以为了方便就先搞一个随机数的函数
function getRandom(l, r) {
return parseInt(l + Math.random() * (r - l + 1));
}
1
2
3
因为是验证码,所以不能让生成的文本可以直接被选中复制,所以给加一个文本不可选中
div.addEventListener(‘selectstart’, function (e) {
e.preventDefault();
})
1
2
3
因为验证码不是每次刷新页面就生成一次,看不清是可以换的,要多次生成,所以就把生成验证码的部分写在一个函数里
function run() {
str = ‘’;
while (div.hasChildNodes()) {
div.removeChild(div.firstChild);
}
for (var i = 0; i < 4; i++) {
var span = document.createElement(‘span’);
span.innerHTML = characters[getRandom(0, characters.length - 1)];
span.style.display = ‘inline-block’;
span.style.fontSize = getRandom(16, 32) + ‘px’;
span.style.color = ‘rgb(’ + getRandom(0, 200) + ‘,’ + getRandom(0, 200) + ‘,’ + getRandom(0, 200) + ‘)’;
span.style.transform = ‘translate(’ + getRandom(-5, 5) + 'px, ’ + getRandom(-5, 5) + ‘px) rotate(’ + getRandom(-20, 20) + ‘deg)’;
str += span.innerHTML;
div.appendChild(span);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
大概说明一下这部分,原理大概就是创建4(我搞的是4位的验证码)个span,然后分别随机设置文本、字体大小、字体颜色、平移旋转啥的,然后把span添加到div里成为div的子节点,然后不要忘了让str变量储存一下验证码的字符

每次生成之前先将上一次生成的验证码删掉(即把div里的所有子节点删除掉),并且把str重置

然后页面刷新的时候生成一次(调用一次),每次点击div的时候重新生成一次(每次点击调用一次)
run();
div.addEventListener(‘click’, run);
1
2
再给提交按钮添加点击事件:判断验证输入的验证码对不对,然后刷新验证码,并且自动将输入框中的文本清除
btn.addEventListener(‘click’, function () {
if (input.value.toLowerCase() == str.toLowerCase()) {
alert(‘验证成功’);
} else {
alert(‘验证失败’);
}
run();
input.value = ‘’;
})
1
2
3
4
5
6
7
8
9
判断验证码这里我为了不区分大小写用了toLowerCase()函数将两个字符串都转化成小写之后再做的比较

至此,功能就都实现的差不多了
看效果:

带注释的完整版代码如下:

js实现验证码
提交 ———————————————— 版权声明:本文为CSDN博主「60rzvvbj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/ycx60rzvvbj/article/details/107441800
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值