使用canvas及js简单生成验证码方法


Posted in Javascript onApril 02, 2017

在很多时候都需要用到验证码,前端验证码需要知道Html5中的canvas知识点。验证码生成步骤是

1.生成一张画布canvas

2.生成随机数验证码 

3.在画布中生成干扰线 

4.把验证码文本填充到画布中 

5.点击画布更换验证码

结构与样式:

<canvas id="mycanvas" width='90' height='40'>
 您的浏览器不支持canvas,请换个浏览器试试~
</canvas>

<style>
#mycanvas{
 cursor: pointer;
}
</style>

下面来编写js代码:

/*生成4位随机数*/
 function rand(){
  var str="abcdefghijklmnopqrstuvwxyz0123456789";
  var arr=str.split("");
  var validate="";
  var ranNum;
  for(var i=0;i<4;i++){
   ranNum=Math.floor(Math.random()*36); //随机数在[0,35]之间
   validate+=arr[ranNum];
  }
  return validate;
 }
 /*干扰线的随机x坐标值*/
 function lineX(){
  var ranLineX=Math.floor(Math.random()*90);
  return ranLineX;
 }
 /*干扰线的随机y坐标值*/
 function lineY(){
  var ranLineY=Math.floor(Math.random()*40);
  return ranLineY;
 }
 function clickChange(){
  var mycanvas=document.getElementById('mycanvas');
  var cxt=mycanvas.getContext('2d');
  cxt.fillStyle='#000';
  cxt.fillRect(0,0,90,40);
  /*生成干扰线20条*/
  for(var j=0;j<20;j++){
   cxt.strokeStyle='#fff';
   cxt.beginPath(); //若省略beginPath,则每点击一次验证码会累积干扰线的条数
   cxt.moveTo(lineX(),lineY());
   cxt.lineTo(lineX(),lineY());
   cxt.lineWidth=0.5;
   cxt.closePath();
   cxt.stroke();
  }
  cxt.fillStyle='red';
  cxt.font='bold 20px Arial';
  cxt.fillText(rand(),25,25); //把rand()生成的随机数文本填充到canvas中  
 }
 clickChange();
 /*点击验证码更换*/
 mycanvas.onclick=function(e){
  e.preventDefault(); //阻止鼠标点击发生默认的行为
  clickChange();
 };

这样就写好一个较普通的验证码了,当然也有很多需要优化的地方,比如干扰线的随机颜色、可以加干扰点以及文本的随机位置随机颜色等等。赶紧去试试吧~

Javascript 相关文章推荐
JavaScript中函数声明优先于变量声明的实例分析
Mar 01 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
Jun 09 Javascript
JQUERY dialog的用法详细解析
Dec 19 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
javascript中加号(+)操作符的一些神奇作用
Jun 06 Javascript
javascript实现tab切换的四种方法
Nov 05 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
Jun 12 Javascript
Bootstrap 布局组件(全)
Jul 18 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
Mar 10 Javascript
Node.js使用Express.Router的方法
Nov 14 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
Nov 28 Javascript
详解在vue-test-utils中mock全局对象
Nov 07 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
Apr 02 #jQuery
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 #Javascript
Vue表单验证插件的制作过程
Apr 01 #Javascript
JS中使用正则表达式g模式和非g模式的区别
Apr 01 #Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 #jQuery
微信小程序网络请求的封装与填坑之路
Apr 01 #Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
Apr 01 #Javascript
You might like
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
python比较两个列表是否相等的方法
2015/07/28 Python
python实现二维插值的三维显示
2018/12/17 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
有个性的自我评价范文
2013/11/15 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang
使用numpy nonzero 找出非0元素
2021/05/14 Python
总结Python连接CS2000的详细步骤
2021/06/23 Python
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏