实现字符验证码

在这里插入图片描述
绝大部分代码来源于韦世东《Python3反爬虫原理与绕过实战》
实现代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>实现字符验证码</title>
</head>
<body>

<canvas id="wordsCanvas">
</canvas>
<script>
var width="200"
var height="40"

var wordsCanvas=document.getElementById('wordsCanvas');
var cvas=wordsCanvas.getContext('2d');

cvas.fillStyle='#CDC8B1';
cvas.fillRect(0,0,width,height);

function randNumber(min,max){
    var res=parseInt(Math.random()*(max-min)+min);
    return res;
}

function randColor(min,max){
    var r=randNumber(min,max);
    var g=randNumber(min,max);
    var b=randNumber(min,max);
    var colorRes="rgb(" + r + "," + g + "," + b + ")";
    return colorRes;
}

var fontSize=randNumber(36,40);
var fonts=fontSize+'px Arial';
var letter="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var strs=[];
for (var i=0;i<6;i++){
    var single=letter[randNumber(0,letter.length)];
    cvas.font=fonts;
    cvas.textBaseline='top';
    cvas.fillStyle=randColor(30,140);
    cvas.save();
    cvas.translate(30*i+15,15);
    cvas.fillText(single,-15+5,-15);
    cvas.restore();
    strs.push(single)
}

function cvasInterfere(cvas,width,height){
    for(var i=0;i<8;i++){
        cvas.beginPath();
        cvas.moveTo(randNumber(0,width),randNumber(0,height));
        cvas.lineTo(randNumber(0,width),randNumber(0,height));
        cvas.strokeStyle=randColor(180,220);
        cvas.closePath();
        cvas.stroke();
    }

    for(var i=0;i<80;i++){
        cvas.beginPath();
        cvas.arc(randNumber(0,width),randNumber(0,height),1,0,2*Math.PI);
        cvas.closePath();
        cvas.fillStyle=randColor(150,250);
        cvas.fill();
    }
}
cvasInterfere(cvas,width,height);

function wordsVerifys(){
    var codeStr=strs.join('');
    var inputCode=document.getElementById('code').value.toUpperCase();
    if(inputCode==codeStr){
        alert('验证码:'+inputCode+',通过验证。');
    }else{
        alert('很遗憾,未通过验证');
    }
}

</script>

<input type="text" id="code">
<button type="" class="btn btn-default" onclick="wordsVerifys()">登录</button>

</body>
</html>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值