使用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 相关文章推荐
HTML中事件触发列表与解说
Jul 09 Javascript
javascript操纵OGNL标签示例代码
Jun 16 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
Jun 23 Javascript
JavaScript中的数组操作介绍
Dec 30 Javascript
JavaScript数组去重的两种方法推荐
Apr 05 Javascript
利用浮层使select不可选的实现方法
Dec 03 Javascript
快速使用node.js进行web开发详解
Apr 26 Javascript
vue.js学习之vue-cli定制脚手架详解
Jul 02 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
Mar 15 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
Aug 27 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
Jan 29 Javascript
微信小程序wepy框架学习和使用心得详解
May 24 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
PHP5 面向对象(学习记录)
2009/12/02 PHP
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
js更优雅的兼容
2010/08/12 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
urllib2自定义opener详解
2014/02/07 Python
python中使用mysql数据库详细介绍
2015/03/27 Python
python开发之thread实现布朗运动的方法
2015/11/11 Python
Python for循环生成列表的实例
2018/06/15 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
银行求职推荐信范文
2013/11/30 职场文书
个人租房协议书
2014/04/09 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
群众路线调研报告范文
2014/11/03 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书