验证码实现 - html页面版

前言

图片验证码是我们日常经常用到的,本文将介绍如何实现以及其原理,并没有过多注重css样式,单纯实现验证码功能。
如果对滑块验证码感兴趣的可以看这篇文章:滑块验证码实现及原理
如果对验证码实现感兴趣的可以看这篇文章:验证码实现 - 工具类调用版
在这里插入图片描述

代码实现

主要是利用canvas画布加上随机字母,以及适当的旋转,移动,颜色。这一块主要利用的是css3的内容。

代码的解释在注释中已经写的很清楚了,如有更好的实现方式欢迎留言。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>图片验证码</title>
</head>

<body>
<canvas id="canvas" width="120" height="40"></canvas>
<input type="text" id="text">
<input type="button" value="提交" id="bt">
<script>
    var canvas = document.getElementById("canvas");//演员
    var context = canvas.getContext("2d");//舞台,getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性。
    var button = document.getElementById("bt");//获取按钮
    var input = document.getElementById("text");//获取输入框
    draw();
    canvas.onclick = function () {
        context.clearRect(0, 0, 120, 40);//在给定的矩形内清除指定的像素
        draw();
    }
    // 随机颜色函数
    function getColor() {
        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 + ")";
    }
    function draw() {
        context.strokeRect(0, 0, 120, 40);//绘制矩形(无填充)
        var aCode = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
        // 绘制字母
        var arr = [] //定义一个数组用来接收产生的随机数
        var num //定义容器接收验证码
        for (var i = 0; i < 4; i++) {
            var x = 20 + i * 20;//每个字母之间间隔20
            var y = 20 + 10 * Math.random();//y轴方向位置为20-30随机
            var index = Math.floor(Math.random() * aCode.length);//随机索引值
            var txt = aCode[index];
            context.font = "bold 20px 微软雅黑";//设置或返回文本内容的当前字体属性
            context.fillStyle=getColor();//设置或返回用于填充绘画的颜色、渐变或模式,随机
            context.translate(x,y);//重新映射画布上的 (0,0) 位置,字母不可以旋转移动,所以移动容器
            var deg=90*Math.random()*Math.PI/180;//0-90度随机旋转
            context.rotate(deg);// 	旋转当前绘图
            context.fillText(txt, 0, 0);//在画布上绘制“被填充的”文本
            context.rotate(-deg);//将画布旋转回初始状态
            context.translate(-x,-y);//将画布移动回初始状态
            arr[i] = txt //接收产生的随机数
        }
        num = arr[0] + arr[1] + arr[2] + arr[3] //将产生的验证码放入num
        // 绘制干扰线条
        for (var i = 0; i < 8; i++) {
            context.beginPath();//起始一条路径,或重置当前路径
            context.moveTo(Math.random() * 120, Math.random() * 40);//把路径移动到画布中的随机点,不创建线条
            context.lineTo(Math.random() * 120, Math.random() * 40);//添加一个新点,然后在画布中创建从该点到最后指定点的线条
            context.strokeStyle=getColor();//随机线条颜色
            context.stroke();// 	绘制已定义的路径
        }
        // 绘制干扰点,和上述步骤一样,此处用长度为1的线代替点
        for (var i = 0; i < 20; i++) {
            context.beginPath();
            var x = Math.random() * 120;
            var y = Math.random() * 40;
            context.moveTo(x, y);
            context.lineTo(x + 1, y + 1);
            context.strokeStyle=getColor();
            context.stroke();
        }

        //点击按钮验证
        button.onclick = function () {
            var text = input.value //获取输入框的值
            if (text === num) {
                alert('验证通过')
            } else {
                alert('验证失败')
            }
        }

    }

</script>
</body>

</html>

效果图展示

验证码失败:
在这里插入图片描述
验证码成功:
在这里插入图片描述


如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
  • 45
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
发送验证码通常需要借助后端的服务来完成。在HTML页面中,可以使用AJAX技术将表单数据异步提交给后端服务,后端服务负责生成验证码并发送给用户,最终将验证码发送状态返回给前端页面。以下是一个简单的示例: HTML页面中的代码: ```html <!DOCTYPE html> <html> <head> <title>发送验证码示例</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> </head> <body> <form> <label for="phone">手机号码:</label> <input type="text" id="phone" name="phone"><br> <label for="btn-send">发送验证码:</label> <button type="button" id="btn-send">发送</button><br> <label for="code">验证码:</label> <input type="text" id="code" name="code"><br> <button type="submit">提交</button> </form> <script> $(function() { $('#btn-send').click(function() { var phone = $('#phone').val(); $.ajax({ type: 'POST', url: '/sendCode', data: { phone: phone }, success: function(res) { alert(res.msg); }, error: function(err) { alert('发送验证码失败'); } }); }); }); </script> </body> </html> ``` 在上面的示例中,我们使用了jQuery库方便地实现了AJAX请求。点击发送按钮后,会将手机号码通过POST请求提交给后端服务的`/sendCode`接口。后端接口会生成验证码并发送给用户,最终返回一个JSON格式的数据,其中包含了发送状态和提示信息。在前端页面中,我们通过`alert`函数弹出返回的提示信息。 需要注意的是,以上示例中的后端服务并没有实现,仅仅是一个示例。实际上,发送验证码需要借助一些短信平台或邮件服务来完成,具体实现方式需要根据具体需求进行选择。同时,为了保证安全性,发送验证码时需要进行一些防范措施,比如防止恶意请求、限制发送频率等等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值