当前位置:首页 > 实用技巧 >

图形验证码如何操作(图形验证码怎样弄才正确)

来源:原点资讯(www.yd166.com)时间:2023-04-22 12:07:34作者:YD166手机阅读>>

细心的同学可以发现,现在很多网站当登录多次之后就会出现一个图形验证码,或是当提交表单、或点击获取手机验证码等等场景都会有图形验证码的出现。

那么图形验证码是为了解决什么问题而出现的呢?

什么是图形验证码

图形验证码是验证码的一种。验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的https://www.baidu.com/s?wd=图灵测试&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式。

既然图形验证码是为了区分机器和人之间的操作,那么我们就可以在图形上绘制一个只有人可以解答的问题。比较常见的是在图片上生成文字验证码,然后用户输入图片上的文字吻合则验证通过。

虽然这种验证方法已经渐渐的被其他更先进的方法所淘汰了(图片上的文字依然可以被程序识别读取),并且前端生成验证码的方式相较于后端安全性不高,但我们的目的只是为了装x,提升程序的安全性只是附带的效果。

登录表单

首先我们需要在在登录表单上额外添加用于输入验证码的FormItem,并且给图形验证码提供一个canvas容器。有时候生成的验证码看不明白,因此需要给验证码添加点击事件用以切换验证码:

<Form ref="loginForm" :model="form" :rules="rules"> <FormItem prop="userName"> <Input v-model="form.userName" placeholder="请输入用户名"> <span slot="prepend"> <Icon :size="16" type="person"></Icon> </span> </Input> </FormItem> <FormItem prop="password"> <Input type="password" v-model="form.password" placeholder="请输入密码"> <span slot="prepend"> <Icon :size="14" type="locked"></Icon> </span> </Input> </FormItem> <FormItem prop="valiCode" v-show="this.count"> <Input v-model="form.valiCode" placeholder="请输入验证码"> <span slot="prepend"> <Icon :size="14" type="ios-analytics"></Icon> </span> </Input> <div class="canvas" @click="getImgYanzheng"> <canvas id="canvas"></canvas> </div> </FormItem> <FormItem> <Button @click="handleSubmit" type="primary" long>登录</Button> </FormItem> </Form> 需要用到的属性

表单需要额外添加valiCode用以记录用户输入的验证码。此处我们定义当用户登录失败一次则需要额外输入图形验证码,因此添加count属性,当登陆失败时count ,当然这样的处理方式并不是很严谨,并且用户刷新页面count则会清零。可以在此处可以增加更多限制,如异地登录等,由于本案例完全没有涉及到后端程序,因此只是简单的以count为判断依据。

data() { return { form: { userName: "",// 用户名 password: "",// 密码 valiCode: ""// 验证码 }, count: 0, // 登录次数 show_num: [],// 图形上的文字 } } 生产图形验证码

页面上为canvas容器绑定的方法getImgYanzheng就是在绘制图形验证码

。在绘制图形验证码时需要为你的验证码定义一个内容集合,此处使用的是:A,B,C,E,F,G,H,J,K,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,好,医,生。字母中剔除了容易误识别的几个字母并且可以随意加入文字(因此图形验证码也可在做成随机生成四个文字让用户点击,或者生成成语让用户填空等等各种形式)。并且忽略用户大小写,因此需要用到toLowerCase方法。

接下来就是canvas绘图的一些技巧了。

canvas绘图

canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:

var c=document.getElementById("myCanvas"); var cxt=c.getContext("2d");

在JavaScript 中使用 id 来寻找 canvas 元素,然后创建context对象,getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。我们可以把canvas 想象成景色而context则是景色呈现的画布。

由于绘制验证码的过程中是从左往右绘制的,因此需要规划好画布的使用范围,另外在验证码绘制时还要加上一些随机的元素使验证码不容易被程序识别。

getImgYanzheng() { var show_num = []; var canvas_width = 150; //document.getElementById("canvas").style.width; var canvas_height = 30; //document.getElementById("canvas").style.height; var canvas = document.getElementById("canvas"); //获取到canvas的对象,景色 var context = canvas.getContext("2d"); //获取到canvas画图的环境,景色呈现的画布 canvas.width = canvas_width; canvas.height = canvas_height; var sCode = "A,B,C,E,F,G,H,J,K,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,好,医,生"; var aCode = sCode.split(","); var aLength = aCode.length; //获取到数组的长度 for (var i = 0; i <= 3; i ) { var j = Math.floor(Math.random() * aLength); //获取到随机的索引值 var deg = (Math.random() * 30 * Math.PI) / 180; //产生0~30之间的随机弧度 var txt = aCode[j]; //得到随机的一个内容 show_num[i] = txt.toLowerCase(); var x = 10 i * 20; //文字在canvas上的x坐标 var y = 20 Math.random() * 8; //文字在canvas上的y坐标 context.font = "bold 23px 微软雅黑"; context.translate(x, y); context.rotate(deg); context.fillStyle = this.randomColor(); context.fillText(txt, 0, 0); context.rotate(-deg); context.translate(-x, -y); } for (var i = 0; i <= 5; i ) { //验证码上显示线条 context.strokeStyle = this.randomColor(); context.beginPath(); context.moveTo( Math.random() * canvas_width, Math.random() * canvas_height ); context.lineTo( Math.random() * canvas_width, Math.random() * canvas_height ); context.stroke(); } for (var i = 0; i <= 30; i ) { //验证码上显示小点 context.strokeStyle = this.randomColor(); context.beginPath(); var x = Math.random() * canvas_width; var y = Math.random() * canvas_height; context.moveTo(x, y); context.lineTo(x 1, y 1); context.stroke(); } this.show_num = show_num; },

验证码及线条需要一些随机的颜色:

randomColor() { //得到随机的颜色值 var r = Math.floor(Math.random() * 256); var g = Math.floor(Math.random() * 256); var b = Math.floor(Math.random() * 256); return "rgb(" r "," g "," b ")"; }

有了以上两个方法,图形验证码就已经生成完毕了,接下来就是使用的问题了。

使用图形验证码

判断登录次数count,如果登录次数大于0则需要输入验证码:

const self = this; if (this.count) { if (this.form.valiCode) { if (this.show_num.join("") != this.form.valiCode.toLowerCase()) { self.$Notice.warning({ title: "验证码错误" }); return; } } else { self.$Notice.warning({ title: "请输入验证码" }); return; } }

当登录失败时需要执行count 并且刷新验证码:

self.count ; self.getImgYanzheng(); self.$Notice.warning({ title: "登陆失败", desc: rs.data.msg });

此时就完成了一个图形验证码的添加工作,同学们快装起来吧。

图形验证码如何操作,图形验证码怎样弄才正确(1)

转评赞就是最大的鼓励

栏目热文

图形数字验证码怎么输入(图形验证码怎么输入才正确)

图形数字验证码怎么输入(图形验证码怎么输入才正确)

今天上午收到广东移动通讯信息说我账户余额不足,不足以扣月租(扣月租的时间是每个月10号,时间还没到,只是提醒)。我感觉...

2023-04-22 12:26:40查看全文 >>

快速输入图形验证码(图形验证码怎么输入才正确)

快速输入图形验证码(图形验证码怎么输入才正确)

老年人学手机(197)不用打数字快速填写验证码请看演示视频,然后再详细看文字内容: 因为平常我们登录一些软件的时...

2023-04-22 12:28:44查看全文 >>

字母图形验证码怎么输入才正确(怎样正确输入图形验证码)

字母图形验证码怎么输入才正确(怎样正确输入图形验证码)

多年预约经验分享给大家。高手勿喷。1、定个闹钟。现在热门纪念币预约基本秒光,所以要在预约期的第一天准点参加,准点到什么程...

2023-04-22 12:17:38查看全文 >>

怎样正确输入图形验证码(怎样输入数字图形验证码)

怎样正确输入图形验证码(怎样输入数字图形验证码)

叮~叮~叮~【党员干部接待岗问答】又上线了保定市公安交警支队为深化车检改革新措施推出了车检网上预约、“交钥匙”服务需要车...

2023-04-22 12:02:10查看全文 >>

图形码正确输入方法(手机图形验证码怎么输入)

图形码正确输入方法(手机图形验证码怎么输入)

近日,有市民咨询,称想了解如何网上自助办理异地就医备案。对此,西安市未央区徐家湾街道办详细整理了步骤:首先,登录 西安市...

2023-04-22 11:57:05查看全文 >>

农商行图形验证码怎么输(农商行的安全密码怎么输入12位数)

农商行图形验证码怎么输(农商行的安全密码怎么输入12位数)

万众一心,众志成城, 抗击疫情,共克时坚, 黎城农商银行与您一起努力 线上线下多渠道助您防控疫情 让您足不出户享受快捷...

2023-04-22 12:27:33查看全文 >>

怎样输入图形验证码(图形验证码怎么填)

怎样输入图形验证码(图形验证码怎么填)

现在需要检车的车主们可通过“交管12123”APP“点对点”进行车检预约那么到底该如何在线预约呢?我们一起来看一下流程操...

2023-04-22 12:10:02查看全文 >>

建行图形验证码怎么用(建行app 图形验证码打不开)

建行图形验证码怎么用(建行app 图形验证码打不开)

有车一族都会面临这样的困惑每次处理交通违章不仅要往返奔波交警大队和银行而且还要不断的排队!排队!现在,蜀黍就来解决你们这...

2023-04-22 12:32:25查看全文 >>

钻头含钴和含钛哪个好(含钴钻头的缺点)

钻头含钴和含钛哪个好(含钴钻头的缺点)

切削技术交流平台(文章 视频)行业:汽车/重工/航空/模具/3C/医疗等如果您有关于刀具设计/刀具应用/刀具制造等技术问...

2023-04-22 12:34:07查看全文 >>

钨钢钻头和含钴钻头哪个好(矿山废旧钻头合金多少钱一斤)

钨钢钻头和含钴钻头哪个好(矿山废旧钻头合金多少钱一斤)

钻孔是制造业中一种应用非常广泛的加工方式,目前市面上常见的钻头,大多以黑色、白色或是金色出现。那么问题来了,为什么钻头要...

2023-04-22 11:58:13查看全文 >>

文档排行