使用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 相关文章推荐
dojo 之基础篇(三)之向服务器发送数据
Mar 24 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
Dec 13 Javascript
js或css文件后面跟参数的原因说明
Jan 09 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
Oct 23 Javascript
js正则表达exec与match的区别说明
Jan 29 Javascript
一个JavaScript处理textarea中的字符成每一行实例
Sep 22 Javascript
JS组件Form表单验证神器BootstrapValidator
Jan 26 Javascript
让图片跳跃起来  javascript图片轮播特效
Feb 16 Javascript
vue.js选中动态绑定的radio的指定项
Jun 02 Javascript
JavaScript中变量提升与函数提升经典实例分析
Jul 26 Javascript
elementUI select组件value值注意事项详解
May 29 Javascript
js实现秒表计时器
Dec 16 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
MVC模式的PHP实现
2006/10/09 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
JavaScript 继承详解(一)
2009/07/13 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
2017/09/15 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
python3.0 字典key排序
2008/12/24 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
使用python画个小猪佩奇的示例代码
2018/06/06 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
django列表筛选功能的实现代码
2020/03/27 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
python Gabor滤波器讲解
2020/10/26 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
销售人员自我评价
2014/02/01 职场文书
师范类求职信
2014/06/21 职场文书
pandas 实现将NaN转换为None
2021/05/14 Python
Python中文纠错的简单实现
2021/07/07 Python