本文实例为大家分享了js实现验证码功能的具体代码,供大家参考,具体内容如下

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

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

提交

然后加一些样式

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;

}

然后大概长这样(有点丑,不过无所谓,主要内容是js)

好,那么开始写js

首先获取这些元素

var input = document.querySelector('input');

var btn = document.querySelector('button');

var div = document.querySelector('div');

然后搞一个字符库和一个保存验证码的字符串

var characters = "QWETYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";

var str;

那个字符库就直接滚键盘就行了~

因为验证码要多次用到随机数,所以为了方便就先搞一个随机数的函数

function getRandom(l, r) {

return parseInt(l + Math.random() * (r - l + 1));

}

因为是验证码,所以不能让生成的文本可以直接被选中复制,所以给加一个文本不可选中

div.addEventListener('selectstart', function (e) {

e.preventDefault();

})

因为验证码不是每次刷新页面就生成一次,看不清是可以换的,要多次生成,所以就把生成验证码的部分写在一个函数里

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);

}

}

大概说明一下这部分,原理大概就是创建4(我搞的是4位的验证码)个span,然后分别随机设置文本、字体大小、字体颜色、平移旋转啥的,然后把span添加到div里成为div的子节点,然后不要忘了让str变量储存一下验证码的字符

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

然后页面刷新的时候生成一次(调用一次),每次点击div的时候重新生成一次(每次点击调用一次)

run();

div.addEventListener('click', run);

再给提交按钮添加点击事件:判断验证输入的验证码对不对,然后刷新验证码,并且自动将输入框中的文本清除

btn.addEventListener('click', function () {

if (input.value.toLowerCase() == str.toLowerCase()) {

alert('验证成功');

} else {

alert('验证失败');

}

run();

input.value = '';

})

判断验证码这里我为了不区分大小写用了toLowerCase()函数将两个字符串都转化成小写之后再做的比较

至此,功能就都实现的差不多了

看效果:

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

js实现验证码

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;

}

提交

// 获取元素

var input = document.querySelector('input');

var btn = document.querySelector('button');

var div = document.querySelector('div');

// 搞一个字符库

var characters = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";

var str; // str用来储存验证码的文本

// 生成一个在[l,r]范围内的随机整数的函数

function getRandom(l, r) {

return parseInt(l + Math.random() * (r - l + 1));

}

// 设置文本不可选中

div.addEventListener('selectstart', function (e) {

e.preventDefault();

})

// 生成验证码的函数

function run() {

// 先重置str

str = '';

// 删除掉div中的所有子节点

while (div.hasChildNodes()) {

div.removeChild(div.firstChild);

}

// 生成由四个字符组成的验证码

for (var i = 0; i < 4; i++) {

// 创建一个span对象

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; // str记录字符

div.appendChild(span); // 将span添加到div中

}

}

run(); // 每次打开/刷新页面时先调用一次

div.addEventListener('click', run); // 每次点击验证码的时候调用一次

// 提交按钮点击事件

btn.addEventListener('click', function () {

if (input.value.toLowerCase() == str.toLowerCase()) {

alert('验证成功');

} else {

alert('验证失败');

}

run();

input.value = '';

})

以上

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

html实现验证码效果,js实现验证码功能相关推荐

  1. php读取js验证码,PHP + JS 实现验证码功能

    验证码是网站防止恶意攻击最常用的手段,怎样使用PHP来生成验证码呢,下面就直接上例子 首先给出生成验证码的PHP代码: 将上面的代码放在一个单独的php文件中,如:auth_code.php,最好不要 ...

  2. 使用js实现验证码功能

    使用js实现验证码功能 通过随机数可以做到生成随机数的功能 如果设定了一段固定的字符串,通过随机数确立可以确定随机索引值,那么就可以生成特定数据内的随机数 实现: 定义数组:var str ='abc ...

  3. JS实现验证码倒计时验证案例

    JS实现验证码倒计时验证案例 前言 验证案例 1.代码 2.代码功能解析 1.验证码 2.验证 3.倒计时 总结 前言 这是一个将验证和倒计时综合起来的案例,案例也不难理解,在页面的设计中,需要这样的 ...

  4. Vue+Spring Boot实现图片验证码、邮箱验证码以及Cookie记住我功能(前后端代码详解)

    Vue实现图片验证码.邮箱验证码以及Cookie记住我功能 前言 图片验证码实现 Vue前端实现 Spring Boot后端实现 邮箱验证码实现 Vue前端实现 Spring Boot后端实现 Coo ...

  5. SSM 实训笔记 -10- 使用 sessionStorage 存储数据、js 图片验证码、登录加载动画

    SSM 实训笔记 -10- 使用 sessionStorage 存储数据.js 图片验证码.登录加载动画 本篇内容: (1)在登录成功时,使用 sessionStorage 存储用户的用户名,并在登录 ...

  6. CheckCode.js 前端验证码插件

    CheckCode.js 前端验证码插件 效果截图 插件使用方法 CheckCode.js 本插件的参考示例 效果截图 插件使用方法 // 在html页面引入CheckCode.js <scri ...

  7. php点击验证码,用PHP实现验证码功能

    作者:hutuworm 来源:糊涂馋寺 牐犇壳埃不少网站为了防止用户利用机器人自动注册.登录.灌水,都采用了 验证码技术.所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰 ...

  8. 传奇服务器设置验证码,如何设置传奇验证码功能

    对于在传奇私服中的验证码功能的设置方法今天我来给大家详细的说明一下,如果想要在自己的私服中实现这个验证码效果的话就仔细看下面的设置步骤说明. 在进行这个功能的设置之前首先需要大家来了解一下设置需要满足 ...

  9. 仿12306铁路客服服务中心登录验证码效果

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

最新文章

  1. udp,tcp软件udp客户端发消息,udp服务器收不到,C#网络编程,多级路由间,UDP发送消息客户端接收不正常?...
  2. Android提醒:Dialog,Toast,Snackbar
  3. centos7安装sftp服务器
  4. Total Physical Response TPR
  5. A2W和W2A :很好的多字节和宽字节字符串的转换宏
  6. 支付宝芝麻分多少算正常?分高有什么好处?
  7. 基于IFC标准的4DBIM可视化平台
  8. motrix下载没速度_再见迅雷!高颜值没广告的下载神器Motrix体验
  9. jquery实现侧边栏手风琴三级导航菜单demo
  10. 计算机辅助设计cad实训总结,CAD上机实验报告.doc
  11. 一文了解超级账本DLT、库、开发工具有哪些, Hyperledger家族成员你认识几个?
  12. Mapreduce Wordcount白名单 Python实现
  13. 未来哪些职业最有可能被人工智能替代
  14. 【clswindow框架应用】自动移动鼠标避免锁屏,鼠标随机移动防止锁屏、待机、休眠
  15. 教程:建立自己的私有云存储
  16. 谈谈数据库里的时间戳
  17. 谷歌数据迁移到火狐_在Firefox中将约会快速添加到Google日历
  18. Http/Https/TCP详解
  19. pancakeswap 前端源码编译及部署-linux
  20. 保姆级Google谷歌浏览器安装路径从C盘转移

热门文章

  1. python爬虫教程蝴蝶汤_Python 爬虫十六式 - 第五式:BeautifulSoup-美味的汤
  2. MFC为窗口创建线程,以及线程与窗口间的通信
  3. python爬取小说项目概述_Python实战项目网络爬虫 之 爬取小说吧小说正文
  4. python socket多线程并发_【Python之旅】第五篇(三):Python Socket多线程并发
  5. 射线和三角形的相交检测(ray triangle intersection test)
  6. SVN中trunk,branches,tags用法详解
  7. STL之adjacent_difference
  8. 流行的9个Java框架介绍:优点、缺点等等
  9. 玩转Docker镜像
  10. iptables防火墙配置工具ShoreWall的安装和使用实例