JavaScript生成图形验证码


Posted in Javascript onAugust 24, 2020

本文实例为大家分享了js生成图形验证码的具体代码,供大家参考,具体内容如下

getGVerify:function (id)
 {
 
  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');
    }
    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 = '20px SimHei';
     //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/2), randomNum(0, this.options.height/2));
     ctx.lineTo(randomNum(0, this.options.width/2), 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 verifyCode = code.toLowerCase();
    var v_code = this.options.code.toLowerCase();
    if(verifyCode == 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 + ")";
  }
 
  return new GVerify(id);
 }

调用方法

var verifyCode = new GVerify(id);

验证方法

if(verifyCode.validate(inputCode)){
  return true;
}esle{
  return false;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
用js的for循环获取radio选中的值
Oct 21 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
Nov 22 Javascript
jQuery中用dom操作替代正则表达式
Dec 29 Javascript
JavaScript实现的一个倒计时的类
Mar 12 Javascript
深入解读JavaScript中的Hoisting机制
Aug 12 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
Jun 01 Javascript
浅谈JavaScript对象的创建方式
Jun 13 Javascript
JS实现的汉字与Unicode码相互转化功能分析
May 25 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
JavaScript工具库之Lodash详解
Jun 15 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
Sep 29 Javascript
JS滚动到指定位置导航栏固定顶部
Jul 03 #Javascript
mac上node.js环境的安装测试
Jul 03 #Javascript
关于页面刷新vuex数据消失问题解决方案
Jul 03 #Javascript
解决VUEX刷新的时候出现数据消失
Jul 03 #Javascript
vue.js学习之UI组件开发教程
Jul 03 #Javascript
用js将long型数据转换成date型或datetime型的实例
Jul 03 #Javascript
Vue.js实例方法之生命周期详解
Jul 03 #Javascript
You might like
php 正则 过滤html 的超链接
2009/06/02 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
WordPress中使主题支持小工具以及添加插件启用函数
2015/12/22 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
python 如何调用远程接口
2020/09/11 Python
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
美国探亲签证邀请信
2014/02/05 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
施工安全责任协议书
2016/03/23 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL