顯示效果:
使用js實現更換與驗證
1、html代碼
<p>
<input class="textline fnleft" type="text" name="ryanz" id="ryanz" placeholder="圓形驗證碼"> <canvas name="yanzm" class="fnright" id="yanzm" width="108" height="48" readonly="" style="cursor:pointer;"> </p>
2、js代碼
<script type="text/javascript" src="js/jquery-1.11.0.min.js" ></script> <script> var yzm=''; /**生成一個隨機數**/ 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+")"; } //頁面開啟調用生成驗證碼方法 drawPic(); document.getElementById("yanzm").onclick = function(e){ //重置驗證碼 yzm=''; e.preventDefault(); drawPic(); //打印當前驗證碼 console.log(yzm); } /**繪制驗證碼圖片**/ function drawPic(){ //alert(a); var yanzm=document.getElementById("yanzm"); var width=yanzm.width; var height=yanzm.height; var ctx = yanzm.getContext('2d'); ctx.textBaseline = 'bottom'; /**繪制背景色**/ ctx.fillStyle = randomColor(180,240); //顏色若太深可能導致看不清 ctx.fillRect(0,0,width,height); /**繪制文字**/ var str = 'ABCEFGHJKLMNPQRSTWXY123456789'; for(var i=0; i<4; i++){ //生成的驗證碼 var txt = str[randomNum(0,str.length)]; ctx.fillStyle = randomColor(50,160); //隨機生成字體顏色 ctx.font = randomNum(15,40)+'px SimHei'; //隨機生成字體大小 var x = 10+i*25; var y = randomNum(25,45); var deg = randomNum(-45, 45); //修改坐標原點和旋轉角度 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); //拼接成驗證碼的最終值 yzm=yzm+txt; } /**繪制干擾點**/ for(var i=0; i<100; i++){ ctx.fillStyle = randomColor(0,255); ctx.beginPath(); ctx.arc(randomNum(0,width),randomNum(0,height), 1, 0, 2*Math.PI); ctx.fill(); } }
3、驗證輸入的值是否與圖中的一致
var state=false; $("#ryanz").blur(function(){ var ydyanz= $("#ryanz").val(); if(ydyanz.length==0){ alert("請輸入驗證碼") }else if(ydyanz.toLowerCase()!=yzm.toLowerCase()){ alert("圖片驗證碼輸入錯誤") //刷新驗證碼 // drawPic(); }else{ alert("驗證碼輸入正確") state=true; } }); </script>