使用canvas及js简单生成验证码方法

Posted heyujun-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用canvas及js简单生成验证码方法相关的知识,希望对你有一定的参考价值。

在很多时候都需要用到验证码,前端验证码需要知道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简单生成验证码方法的主要内容,如果未能解决你的问题,请参考以下文章

前端验证码生成

canvas实现验证码功能

微信小程序 canvas 生成随机验证码

node.js生成验证码及图片

验证码生成器(在TImage.Canvas上写字,很好看)

php生成各种验证码