中易网

canvas验证码是怎么实现的

答案:1  悬赏:70  
解决时间 2021-02-16 10:06
canvas验证码是怎么实现的
最佳答案
1.html部分

2.js部分
2.1随机生成验证码
复制代码
//生成验证码
function createVCode() {
var codeString = '0,1,2,3,4,5,6,7,8,9';
codeString += ',A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z';
codeString += ',a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,t,z'
var codeArr = codeString.split(',');
var codeData = [];
var codeLength = 0;
while (codeLength < 4) {
codeLength = Math.ceil(Math.random() * 5);
}
for (var i = 0; i < codeLength; i++) {
codeData.push(codeArr[Math.ceil(Math.random() * 62) - 1]);
}
var StringCodeData = codeData.join('');
return StringCodeData;
}
复制代码
2.2在canvas中渲染验证码
复制代码
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 + ')';
}
//显示验证码
function renderCode(codeData) {
console.log(codeData);
var canvas = document.getElementById('vCode');
var width = canvas.width;
var height = canvas.height;
var ctx = canvas.getContext('2d');
ctx.fillStyle = randomColor(180, 240);
ctx.fillRect(0, 0, width, height);
ctx.textBaseline = 'bottom';
for (var i = 0; i < codeData.length; i++) {
ctx.fillStyle = randomColor(30, 100);
ctx.font ='bold '+randomNum(22, 36) + 'px Arail';
var x = 10 + i * 16;
var y = randomNum(30, 40);
var deg = randomNum(-20, 20);
ctx.translate(x, y);
ctx.rotate(deg * Math.PI / 180);
ctx.fillText(codeData[i], 0, 0);
ctx.rotate(-deg * Math.PI / 180);
ctx.translate(-x, -y);
}
for (var j = 0; j < 5; j++) {
ctx.strokeStyle = randomColor(40, 180);
ctx.beginPath();
ctx.moveTo(randomNum(0, width), randomNum(0, height));
ctx.lineTo(randomNum(0, width), randomNum(0, height));
ctx.stroke();
}
for(var k =0;k<100;k++){
ctx.fillStyle = randomColor(0,255);
ctx.beginPath();
ctx.arc(randomNum(0,width),randomNum(0,height),1,0,2*Math.PI);
ctx.fill();
}
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
自制一对2.0音箱需要多个个分频器
渔泉口村地址有知道的么?有点事想过去
深圳世纪海景高尔夫俱乐部地址在什么地方,想
芜湖市瑞佳汇塑胶五金有限公司我想知道这个在
护肝养脾的食材有哪些
50T龙门吊转弯半径、爬坡坡度最大不能超过多
头彩(行政路店)地址在哪,我要去那里办事
安峰镇中天驾校地址在什么地方,想过去办事
洛天依有哪些好听的歌
石狮村地址在什么地方,想过去办事
求一部关于闪电的灾难电影
大地通讯怎么去啊,我要去那办事
旺佳隆百货财大店在哪里啊,我有事要去这个地
淄川国土资源执法监察大队昆仑中队地址在什么
沁昕是什么意思
推荐资讯
闵氏煨汤馆地址在什么地方,想过去办事
想找一部关于哈士奇犬的电影
从太原去普陀山怎么走,详细些的
山西临汾有马自达的4S店吗?
绿色特产(新乡长垣县)地址好找么,我有些事要
我想做保姆.现在工资是多少一个月.是做住家保
顺达配货(威海西路与深圳北路交叉口西北100米
GANT(青岛万象城店)地址在什么地方,我要处理
Doremi音乐教室(高新路)地址在哪,我要去那里
Roleplay扮演者桌游怎么去啊,我要去那办事
从重庆秀山到江苏江阴应该怎么走?应该坐汽车
克拉玛依河地址好找么,我有些事要过去
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?