顯示效果:

使用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>
