使用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 相关文章推荐
让checkbox不选中即将选中的checkbox不选中
Jul 11 Javascript
JavaScript中的substr()方法使用详解
Jun 06 Javascript
javascript随机显示背景图片的方法
Jun 18 Javascript
js实现当前输入框高亮显示的方法
Aug 19 Javascript
基于JavaScript创建动态Dom
Dec 08 Javascript
完美实现八种js焦点轮播图(上篇)
Jul 18 Javascript
JavaScript中数组常见操作技巧
Sep 01 Javascript
vue-cli如何引入bootstrap工具的方法
Oct 19 Javascript
在vue中使用css modules替代scroped的方法
Mar 10 Javascript
解决LayUI数据表格复选框不居中显示的问题
Sep 25 Javascript
微信小程序定义和调用全局变量globalData的实现
Nov 01 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
Jul 20 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
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python中global用法实例分析
2015/04/30 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
python3中int(整型)的使用教程
2017/03/23 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
Python中format()格式输出全解
2019/04/12 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
如何获取Python简单for循环索引
2019/11/21 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
举例讲解Python装饰器
2020/12/24 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
自荐信封面
2013/12/04 职场文书
法学个人求职信范文
2014/01/27 职场文书
毕业典礼邀请函
2015/01/31 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL