当前位置:首页 > 知识普及 > 正文内容

web前端制作图形验证码

web前端制作图形验证码

我们需在登录表单中增设一个用于输入验证码的表单项,并为图形验证码设置一个canvas画布。由于有时生成的验证码难以辨认,故需为验证码添加点击功能,以便实现验证码的更换。

web前端制作图形验证码 第1张

                                                                                                                                                                                                   
                   
   
               

需要用到的属性

表单中需额外加入valiCode字段来记录用户的验证码输入。在此情况下,我们设定用户每次登录失败后,都必须额外输入图形验证码。为此,我们引入了count属性,每当登录失败发生时,count值将增加。然而,这种处理方法并不十分严密web前端制作图形验证码,而且用户在刷新页面后,count值会重置为零。对此处登录实施额外限制,例如异地访问控制等,鉴于本案例并未深入涉及后端编程,故仅以计数器值作为判断标准。

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

生产图形验证码

页面上所绑定的方法名为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内部进行。

获取文档中ID为"myCanvas"的元素,并将其赋值给变量c。
var cxt=c.getContext("2d");

在JavaScript编程语言中,我们通过id属性定位canvas元素,进而构建context对象。这里的getContext("2d")对象是HTML5内置的,它提供了丰富的绘图功能,包括绘制路径、矩形、圆形、文本以及插入图像等。将canvas视作一幅风景,那么context对象便是呈现这幅风景的画布。

在绘制验证码时,由于绘制顺序是从左至右进行的,这就要求我们事先合理规划画布的可用区域。同时,在绘制过程中,还需融入一些随机元素,以增强验证码的识别难度前端图片验证码怎么做,防止其被程序轻易识别。

getImgYanzheng() {
      var show_num = [];
canvas的宽度被设定为150像素,这一值等同于通过获取ID为"canvas"的元素的样式宽度。
canvas的高度被设置为30像素,这一值等同于通过获取ID为"canvas"的元素的样式高度。
通过document.getElementById方法,我成功获取了名为"canvas"的元素,它将作为绘画的画布,用于呈现景色。
canvas画布的绘图环境已被成功获取,即创建了用于景色展示的绘图上下文。
canvas的宽度被设置为canvas_width的值。
canvas的高度被设置为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至9、0,以及“好”和“医生”等字符。
定义变量aCode,通过将字符串sCode以逗号为分隔符进行分割操作。
aCode的长度信息已成功获取,并存储在变量aLength中。
      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() {
      //得到随机的颜色值
r等于256乘以随机数再向下取整的结果。
定义变量g,其值为通过Math.random()函数生成的介于0和1之间的随机数与256相乘后,使用Math.floor()函数向下取整得到的结果。
定义变量b,其值为通过Math.random()函数生成的介于0到1之间的随机数乘以256,然后使用Math.floor()函数将结果向下取整至最接近的整数。
返回字符串"rgb(" + r + "," + g + "," + b + ")"。
    }

采用上述两种手段,图形验证码的生成过程便已完成,随后便进入了如何应用这一验证码的阶段。

使用图形验证码

对登录次数count进行评估,若该次数超出零,便需提供验证码。

const self = this;
if (this.count) {
若此表单验证码有效,{
若(当前显示的数字序列转换为字符串后与表单中的验证码值进行大小写不敏感的比较)不匹配,{
标题:确认码输入有误
                });
                return;
            }
        } else {
以便用户及时了解相关情况。
输入验证码提示:请输入验证码
            });
            return;
        }
    }

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

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

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

加入微信交流群:************ ,请猛戳这里→点击入群

扫描二维码推送至手机访问。

版权声明:本文由智汇百科网发布,如需转载请注明出处。

本文链接:https://www.zhihuibkw.com/post/3862.html

分享给朋友:

“web前端制作图形验证码” 的相关文章

药家鑫案再审!律师:原判量刑过重,应改判死缓

药家鑫案再审!律师:原判量刑过重,应改判死缓

药家鑫案曾在社会上引起了巨大的轰动和广泛的关注,这不仅是因为案件本身的残忍性质,更是因为它引发了人们对于司法公正、刑罚裁量等一系列重要问题的深入思考。如今,药家鑫案迎来了再审,其背后的法律争议和社会影响再次成为焦点,而律师提出原判量刑过重,应改判死缓的观点,更是引发了各界的热议。药家鑫案发生于 20...

劳荣枝被执行死刑!家属索赔4.8万,法院驳回

劳荣枝被执行死刑!家属索赔4.8万,法院驳回

2023 年 11 月 28 日,随着一声法槌落下,劳荣枝被依法执行死刑,这一轰动全国的案件终于画上了句号。令人意外的是,劳荣枝家属竟提出索赔 4.8 万的诉求,而法院最终驳回了这一请求。这一事件引发了广泛的社会关注和深刻的思考。劳荣枝案历经多年的侦查、审判,其情节之恶劣、手段之残忍,令人发指。她与...

孙卓被拐案宣判!人贩子吴飞龙获刑5年,网友不满

孙卓被拐案宣判!人贩子吴飞龙获刑5年,网友不满

孙卓被拐案,曾牵动着无数人的心。在历经漫长的等待与追寻后,终于迎来了宣判的时刻。当得知人贩子吴飞龙仅获刑 5 年时,众多网友纷纷表示不满,这背后蕴含着人们对人贩子罪行的深刻愤慨以及对司法判决的期待与反思。孙卓被拐,这是一个家庭的噩梦,更是对社会公序良俗的严重践踏。孩子是家庭的希望,是社会的未来,而人...

土壤知识了解土壤才能种好植物

土壤知识了解土壤才能种好植物

土壤,是地球上最珍贵的自然资源之一,它犹如植物的摇篮,承载着植物生长的一切基础。只有深入了解土壤,我们才能真正种好植物,让那一片片绿色在大地上绽放。土壤的构成是复杂而多样的。它由矿物质、有机质、水分和空气等多种成分组成。矿物质是土壤的骨架,提供了植物生长所需的基本营养元素,如氮、磷、钾等。有机质则如...

书法基础知识:领略汉字之美

书法基础知识:领略汉字之美

汉字,作为中华文化的瑰宝,承载着千年的历史与智慧,其独特的魅力在书法艺术中得以淋漓尽致地展现。书法,以笔墨为媒介,将汉字的形态、结构、气韵等元素巧妙融合,创造出一幅幅令人叹为观止的艺术作品,让我们一同领略汉字之美。从形态上看,汉字宛如一幅幅生动的图案。每一个汉字都有着独特的笔画组合和结构布局,点、横...

缝纫知识简单缝补不求人

缝纫知识简单缝补不求人

在生活中,我们难免会遇到衣物破损的情况,而将衣物送去专业的裁缝店修补可能既耗时又花费不菲。其实,只要掌握一些基本的缝纫知识,我们完全可以自己动手进行简单的缝补,不仅能节省开支,还能增添一份生活的乐趣。我们来了解一下缝纫工具。一把锋利的剪刀是必不可少的,它可以帮助我们准确地裁剪布料和修剪线头。针线也是...