原生简单验证码实现

<!DOCTYPE html>

<html lang="en">

  <head>

    <meta charset="UTF-8"/>

    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>

    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>

    <title>code</title>

  </head>

  <body>

    <canvas id="mycanvas"></canvas><br/><br/>

    <input type="button" id="mybutton" value="刷新" οnclick="code(options)"/>

    <script>

      var options={ canvasld:'mycanvas', width:150, height:50, txt:''}

      // 生产验证码

       function produceCode(options) {

        var code=''

        var random=new Array(0,1,2,3,4,5,6,7,8,9,

        'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R', 'S','T','U','V','W','X','Y','Z',

        'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')

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

        var index=Math.floor(Math.random()*62);

        code+=random[index];

      }

       options.txt=code;

       

      }

      // 产生随机数字

       function randomNum(min,max){

        return Math.floor(Math.random()*(max-min)+min);

      }

      //  产生随机颜色

      function randomColor(min,max){

      var r=randomNum(min,max);

      var g=randomNum(min,max);

      var b=randomNum(min,max);

      return"rgb("+r+","+g+","+b+")" }

      // /生产验证码背景

      function code(options) {

        produceCode(options);

        console.log(options.txt)

       var canvas= document.getElementById(options.canvasld);

       canvas.width=options.width || 150;  //画布的宽

       canvas.height=options.height || 50;//画布的高

      var ctx=canvas.getContext("2d"); // 创建一个canvas对象

      ctx.textBaseline="middle";

      ctx.fillStyle=randomColor(60,255);

      ctx.fillRect(0,0,canvas.width,canvas.height);

       for(var i=0;i<options.txt.length;i++) {

       var txt=options.txt.charAt(i);

       ctx.font='50px SimHei';

      ctx.fillStyle=randomColor(60,180);  

      //  *随机生成字体颜色*/

      ctx.shadowOffsetY= randomNum(-3,3);

      ctx.shadowBlur =randomNum(-3,3);

      ctx.shadowColor ="rgba(0,0,0,0.3)";

      var x= options.width /(options.txt.length+1)*(i+1);

      var y= options.height /2;

     var deg= randomNum(-30,30);

      // *设置旋转角度和坐标原点*/

     ctx.translate(x,y);

      ctx.rotate(deg *Math.PI /180);

     ctx.fillText(txt,0,0);

    //  *恢复旋转角度和坐标原点/

     ctx.rotate(-deg* Math.PI /180);

     ctx.translate(-x,-y);

    }

    // *1~4条随机干扰线随机出现*/

    for (var i= 0;i <randomNum(1,2);i++){

      ctx.strokeStyle =randomColor(40,180);

      ctx.beginPath();

      ctx.moveTo(randomNum(0,options.width),randomNum(0,options.height));

      ctx.lineTo(randomNum(0,options.width),randomNum(0,options.height));

      ctx.stroke();

    }

      // *绘制干扰点/

      for (var i= 0;i<options.width /19;i++){

        ctx.fillStyle =randomColor(0,255);

        ctx.beginPath();

        ctx.arc(randomNum(0,options.width),randomNum(0,options.height),1,0,2 *Math.Pl);

         ctx.fill();

        }

      }

      code(options)

        // window.οnlοad=function() {

        //   code(options)

        // }

    </script>

  </body>

</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值