canvas实现干扰随机验证码

效果展示:

代码展示:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas 模板</title>
    <style>
        canvas {
            border: 1px solid #000;
            vertical-align: bottom;
        }
        input{
            width: 120px;
            height: 40px;
            vertical-align: bottom;
            padding: 0;
            border: 1px solid #000;
            text-indent: 5px;
        }
    </style>
</head>
<body>
<canvas width="120" height="40"></canvas>
<input type="text" placeholder="验证">
<button>验证</button>
<script>
    var mcanvas = document.querySelector("canvas");
    var ctx = mcanvas.getContext("2d");
    var text = "0123456789zxcvbnmlkjhgfdsaqwertyuiop";
    var content = "";
 
    mcanvas.onclick =function () {
        ctx.clearRect(0,0,120,40);
        reset();
    };


   reset();
   function reset() {
       //   绘制验证码文本
       for(var i = 0; i < 4; i++){
           ctx.beginPath();
           ctx.fillStyle = getRandomColor(80,120);
           ctx.textBaseline = "top";
           ctx.font = "18px '微软雅黑'";
           ctx.textAlign="center";
           var rtext = text[Mathrandom(0,text.length-1)];
           content+=rtext;
             //旋转
           ctx.translate(i*30,0);
           var mdeg = Mathrandom(0,30);
           ctx.rotate(Math.PI/180*mdeg);
           ctx.fillText(rtext,Mathrandom(12,25),Mathrandom(2,20));
           ctx.rotate(-Math.PI/180*mdeg);
           ctx.translate(-i*30,0);
       }

       //    线
       for (var i = 0; i < 4; i++) {
           ctx.beginPath();
           ctx.strokeStyle = getRandomColor(120, 220);
           ctx.moveTo(Mathrandom(0,30),Mathrandom(0,40));
           ctx.lineTo(Mathrandom(90,110),Mathrandom(0,40));
           ctx.stroke();
       }

       //    点
       for (var i = 0; i < 25; i++) {
           ctx.beginPath();
           ctx.fillStyle = getRandomColor(120, 220);
           ctx.arc(Mathrandom(5, 110), Mathrandom(5, 35), 1, 0, Math.PI * 2);
           ctx.fill();
       }

   }
    //    定义范围
    function Mathrandom(min, max) {
        return parseInt(Math.random() * (max - min + 1) + min);
    }

    //    获取随机色
    function getRandomColor(min, max) {
        var r = Mathrandom(min, max);
        var g = Mathrandom(min, max);
        var b = Mathrandom(min, max);
        return "rgb(" + r + "," + g + "," + b + ")";
    }

    //验证功能
    document.querySelector("button").onclick = function () {
       var minput =  document.querySelector("input");
        var inputValue =minput.value;
        console.log(content);
        if(inputValue===content){
           alert("走你!!!");
            minput.value = "";
           ctx.clearRect(0,0,120,40);
           content="";
           reset();
       }else{
           alert("错误");
           minput.value = "";
       }
    }


</script>
</body>
</html>

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值