input,canvas,button{
vertical-align: bottom;
}
<input type="text" id="codeinp">
<canvas title="点我刷新验证码" width="120" height="40" style="border: 1px solid #000;">
对不起,您的浏览器不支持canvas
</canvas>
<button>验证</button>
var mycanvas=document.getElementsByTagName("canvas")[0];
var ctx=mycanvas.getContext("2d");
var pointNum=80;
var lineNum=7;
var str="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRXTUVWXYZ";
var codeStr="";
mycanvas.onclick=function () {
codeStr= ranCode();
};
codeStr=ranCode();
var codeinp=document.getElementById("codeinp");
var btn=document.getElementsByTagName("button")[0];
btn.onclick=function () {
if(codeinp.value=="" || codeinp.value.toLowerCase()!=codeStr.toLowerCase()){
alert("验证码错误!");
}else if(codeinp.value.toLowerCase()==codeStr.toLowerCase()){
alert("验证码通过!")
}
codeStr=ranCode();
};
function ranCode() {
ctx.clearRect(0,0,120,40);
var text="";
for(var i=0;i<4;i++){
ctx.beginPath();
ctx.textBaseline="top";
ctx.font="20px 宋体";
ctx.fillStyle=getRanColor(0,100);
var ranS=str.charAt(getRanNumber(0,str.length-1));
text+=ranS;
ctx.save();
ctx.translate(i*30,0);
var ranAngle=Math.PI/180*getRanNumber(-20,20)
ctx.rotate(ranAngle);
ctx.fillText(ranS,getRanNumber(10,20),getRanNumber(0,20));
ctx.restore();
}
for(var i=0;i<pointNum;i++){
ctx.beginPath();
ctx.fillStyle=getRanColor(180,240);
ctx.arc(getRanNumber(0,120),getRanNumber(0,40),1,0,Math.PI*2);
ctx.fill();
}
for(var i=0;i<lineNum;i++){
ctx.beginPath();
ctx.strokeStyle=getRanColor(180,240);
ctx.moveTo(getRanNumber(0,20),getRanNumber(0,40));
ctx.lineTo(getRanNumber(100,120),getRanNumber(0,40));
ctx.stroke();
}
return text;
}
function getRanNumber(min,max) {
return parseInt(Math.random()*(max-min+1)+min);
}
function getRanColor(min,max) {
if(min<0 || min>255){
min=0;
}
if(max<0 || max>255){
max=255;
}
var r=getRanNumber(min,max);
var g=getRanNumber(min,max);
var b=getRanNumber(min,max);
return "rgb("+r+","+g+","+b+")";
}
