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 相关文章推荐
js保留小数点后几位的写法
Jan 03 Javascript
多个jQuery版本共存的处理方案
Mar 17 Javascript
纯Javascript实现ping功能的方法
Mar 20 Javascript
Javascript中使用parseInt函数需要注意的问题
Apr 02 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
javascript获取wx.config内部字段解决微信分享
Mar 09 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
Apr 13 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
Nov 15 Javascript
详解Vue打包优化之code spliting
Apr 09 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
Apr 17 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
Sep 24 Javascript
vue addRoutes路由动态加载操作
Aug 04 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
php实现上传图片文件代码
2015/07/19 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
javascript 函数式编程
2007/08/16 Javascript
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
2010/09/14 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
python读取html中指定元素生成excle文件示例
2014/04/03 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
EJB实例的生命周期
2016/10/28 面试题
大学生新闻专业个人自我评价
2013/11/12 职场文书
元旦晚会感言
2014/03/12 职场文书
中学推普周活动总结
2015/05/07 职场文书
2016高三毕业赠言寄语
2015/12/04 职场文书
社区干部培训心得体会
2016/01/06 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书