• 技术文章 >web前端 >js教程

    如何使用canvas和js完成验证码的生成方法介绍

    巴扎黑巴扎黑2017-08-16 11:59:10原创719
    在很多时候都需要用到验证码,前端验证码需要知道Html5中的canvas知识点。验证码生成步骤是:
    1.生成一张画布canvas
    2.生成随机数验证码
    3.在画布中生成干扰线
    4.把验证码文本填充到画布中
    5.点击画布更换验证码
    结构与样式:
    <canvas id="mycanvas" width='90' height='40'>
     您的浏览器不支持canvas,请换个浏览器试试~
    </canvas>
      
    <style>
    #mycanvas{
     cursor: pointer;
    }
    </style>

    下面来编写js代码:
    /*生成4位随机数*/
     function rand(){
      var str="abcdefghijklmnopqrstuvwxyz0123456789";
      var arr=str.split("");
      var validate="";
      var ranNum;
      for(var i=0;i<4;i++){
       ranNum=Math.floor(Math.random()*36); //随机数在[0,35]之间
       validate+=arr[ranNum];
      }
      return validate;
     }
     /*干扰线的随机x坐标值*/
     function lineX(){
      var ranLineX=Math.floor(Math.random()*90);
      return ranLineX;
     }
     /*干扰线的随机y坐标值*/
     function lineY(){
      var ranLineY=Math.floor(Math.random()*40);
      return ranLineY;
     }
     function clickChange(){
      var mycanvas=document.getElementById('mycanvas');
      var cxt=mycanvas.getContext('2d');
      cxt.fillStyle='#000';
      cxt.fillRect(0,0,90,40);
      /*生成干扰线20条*/
      for(var j=0;j<20;j++){
       cxt.strokeStyle='#fff';
       cxt.beginPath(); //若省略beginPath,则每点击一次验证码会累积干扰线的条数
        cxt.moveTo(lineX(),lineY());
       cxt.lineTo(lineX(),lineY());
       cxt.lineWidth=0.5;
       cxt.closePath();
       cxt.stroke();
      }
      cxt.fillStyle='red';
      cxt.font='bold 20px Arial';
      cxt.fillText(rand(),25,25); //把rand()生成的随机数文本填充到canvas中  
     }
     clickChange();
     /*点击验证码更换*/
     mycanvas.onclick=function(e){
      e.preventDefault(); //阻止鼠标点击发生默认的行为
      clickChange();
     };

    这样就写好一个较普通的验证码了,当然也有很多需要优化的地方,比如干扰线的随机颜色、可以加干扰点以及文本的随机位置随机颜色等等。赶紧去试试吧~

    以上就是如何使用canvas和js完成验证码的生成方法介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:javascript canvas 使用
    上一篇:Node.js中的网络通讯模块实现方法详解 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 一文详解Node中的模块化、文件系统与环境变量• 为什么要用debugger来调试代码?这样你能读懂各种源码!• 一文探究Angular中的服务端渲染(SSR)• 一文聊聊Node包管理发展的五个阶段• 带你了解Angular组件间进行通信的几种方法
    1/1

    PHP中文网