JS如何编程一个图片验证码的功能效果
导读:相信很多人对“JS如何编程一个图片验证码的功能效果”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助 本文实例为大家分享了js实现图片验证码功能的具体代码,供大家参考,具体内容如下 以下代码可以直接...
相信很多人对“JS如何编程一个图片验证码的功能效果”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助
本文实例为大家分享了js实现图片验证码功能的具体代码,供大家参考,具体内容如下
以下代码可以直接copy运行,不需要引入jquery.jar
1. html代码
%@ page language="java" contenttype="text/html;
charset=utf-8" pageencoding="utf-8"%>
html>
head>
meta http-equiv="content-type" content="text/html;
charset=utf-8">
script src="%=request.getcontextpath()%>
/js/gverify.js">
/script>
style type="text/css">
body, html {
width: 100%;
text-align: center;
}
#picyzm {
width: 100px;
height: 40px;
display: inline-block;
margin: 0 30px;
}
#verifycodedemo {
width: 100%;
display: flex;
margin-top: 200px;
justify-content: center;
}
#btn {
margin: 30px auto;
background-color: blue;
color: #fff;
border-radius: 5px;
border: 0;
width: 100px;
height: 40px;
}
/style>
/head>
body>
div id="verifycodedemo">
input type="text" id="code_input" placeholder="在这个框里输入验证码">
p id="picyzm">
/p>
/div>
input type="button" value="验证" id="btn">
script type="text/javascript">
//初始化验证码
var verifycode = new gverify({
id : "picyzm",
type : "blend"
}
);
//点击按钮验证
var code = document.getelementbyid("code_input");
var btn = document.getelementbyid("btn");
btn.onclick = function() {
var res = verifycode.validate(code.value);
if (res) {
alert("验证通过");
}
else {
alert("验证码错误");
}
}
/script>
/body>
/html>
2. 引入gverify.js
!(function(window, document) {
function gverify(options) {
// 创建一个图形验证码对象,接收options对象为参数
this.options = {
// 默认options参数值
id: "", // 容器id
canvasid: "verifycanvas", // canvas的id
width: "100", // 默认canvas宽度
height: "30", // 默认canvas高度
type: "blend", // 图形验证码默认类型blend:数字字母混合类型、number:纯数字、letter:纯字母
code: ""
}
if(object.prototype.tostring.call(options) == "[object object]"){
// 判断传入参数类型
for(var i in options) {
// 根据传入的参数,修改默认参数值
this.options[i] = options[i];
}
}
else{
this.options.id = options;
}
this.options.numarr = "0,1,2,3,4,5,6,7,8,9".split(",");
this.options.letterarr = getallletter();
this._init();
this.refresh();
}
gverify.prototype = {
/** 版本号* */
version: '1.0.0',
/** 初始化方法* */
_init: function() {
var con = document.getelementbyid(this.options.id);
var canvas = document.createelement("canvas");
this.options.width = con.offsetwidth >
0 ? con.offsetwidth : "100";
this.options.height = con.offsetheight >
0 ? con.offsetheight : "30";
canvas.id = this.options.canvasid;
canvas.width = this.options.width;
canvas.height = this.options.height;
canvas.style.cursor = "pointer";
canvas.innerhtml = "您的浏览器版本不支持canvas";
con.appendchild(canvas);
var parent = this;
canvas.onclick = function(){
parent.refresh();
}
}
,
/** 生成验证码* */
refresh: function() {
this.options.code = "";
var canvas = document.getelementbyid(this.options.canvasid);
if(canvas.getcontext) {
var ctx = canvas.getcontext('2d');
}
else{
return;
}
ctx.textbaseline = "middle";
ctx.fillstyle = randomcolor(180, 240);
ctx.fillrect(0, 0, this.options.width, this.options.height);
if(this.options.type == "blend") {
// 判断验证码类型
var txtarr = this.options.numarr.concat(this.options.letterarr);
}
else if(this.options.type == "number") {
var txtarr = this.options.numarr;
}
else {
var txtarr = this.options.letterarr;
}
for(var i = 1;
i = 4;
i++) {
var txt = txtarr[randomnum(0, txtarr.length)];
this.options.code += txt;
ctx.font = randomnum(this.options.height/2, this.options.height) + 'px simhei';
// 随机生成字体大小
ctx.fillstyle = randomcolor(50, 160);
// 随机生成字体颜色
ctx.shadowoffsetx = randomnum(-3, 3);
ctx.shadowoffsety = randomnum(-3, 3);
ctx.shadowblur = randomnum(-3, 3);
ctx.shadowcolor = "rgba(0, 0, 0, 0.3)";
var x = this.options.width / 5 * i;
var y = this.options.height / 2;
var deg = randomnum(-30, 30);
/** 设置旋转角度和坐标原点* */
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);
}
/** 绘制干扰线* */
for(var i = 0;
i 4;
i++) {
ctx.strokestyle = randomcolor(40, 180);
ctx.beginpath();
ctx.moveto(randomnum(0, this.options.width), randomnum(0, this.options.height));
ctx.lineto(randomnum(0, this.options.width), randomnum(0, this.options.height));
ctx.stroke();
}
/** 绘制干扰点* */
for(var i = 0;
i this.options.width/4;
i++) {
ctx.fillstyle = randomcolor(0, 255);
ctx.beginpath();
ctx.arc(randomnum(0, this.options.width), randomnum(0, this.options.height), 1, 0, 2 * math.pi);
ctx.fill();
}
}
,
/** 验证验证码* */
validate: function(code){
var code = code.tolowercase();
var v_code = this.options.code.tolowercase();
if(code == v_code){
return true;
}
else{
return false;
}
}
}
/** 生成字母数组* */
function getallletter() {
var letterstr = "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,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";
return letterstr.split(",");
}
/** 生成一个随机数* */
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 + ")";
}
window.gverify = gverify;
}
)(window, document);
3. 效果图
通过以上内容的阐述,相信大家对“JS如何编程一个图片验证码的功能效果”已经有了进一步的了解,更多相关的问题,欢迎关注网络或到官网咨询客服。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: JS如何编程一个图片验证码的功能效果
本文地址: https://pptw.com/jishu/654379.html
