原生简单验证码实现

<!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>

可以使用原生 JavaScript 实现验证码。以下是一个简单的例子: HTML: ```html <label for="captcha">验证码:</label> <input type="text" id="captcha"> <canvas id="captchaCanvas"></canvas> <button id="refreshCaptcha">刷新验证码</button> ``` JavaScript: ```javascript var canvas = document.getElementById("captchaCanvas"); var ctx = canvas.getContext("2d"); // 生成随机验证码 function generateCaptcha() { var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var captchaLength = 6; var captcha = ""; for (var i = 0; i < captchaLength; i++) { captcha += chars.charAt(Math.floor(Math.random() * chars.length)); } return captcha; } // 绘制验证码 function drawCaptcha() { var captcha = generateCaptcha(); canvas.width = 100; canvas.height = 40; ctx.font = "bold 20px sans-serif"; ctx.fillStyle = "#000"; ctx.fillText(captcha, 25, 25); // 添加干扰线 for (var i = 0; i < 5; i++) { ctx.beginPath(); ctx.moveTo(Math.floor(Math.random() * canvas.width), Math.floor(Math.random() * canvas.height)); ctx.lineTo(Math.floor(Math.random() * canvas.width), Math.floor(Math.random() * canvas.height)); ctx.strokeStyle = "#000"; ctx.stroke(); } return captcha; } // 刷新验证码 document.getElementById("refreshCaptcha").addEventListener("click", function() { var captchaInput = document.getElementById("captcha"); captchaInput.value = ""; var captcha = drawCaptcha(); }); // 验证输入的验证码是否正确 document.getElementById("captcha").addEventListener("input", function() { var captchaInput = document.getElementById("captcha"); if (captchaInput.value.length == 6 && captchaInput.value.toUpperCase() == captcha) { alert("验证码正确!"); } }); ``` 这个例子首先定义了一个 `generateCaptcha` 函数来生成随机的验证码,然后定义了一个 `drawCaptcha` 函数来绘制验证码,并在验证码中添加了一些干扰线以增加难度。最后使用 `addEventListener` 为刷新按钮和验证码输入框添加事件监听器。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值