使用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 相关文章推荐
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
Sep 27 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
Oct 30 Javascript
JavaScript 高效运行代码分析
Mar 18 Javascript
有关js的变量作用域和this指针的讨论
Dec 16 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
Sep 05 Javascript
jquery动态改变div宽度和高度
Feb 09 Javascript
javascript正则表达式中的replace方法详解
Apr 20 Javascript
JavaScript性能优化总结之加载与执行
Aug 11 Javascript
详谈表单重复提交的三种情况及解决方法
Aug 16 Javascript
JS Math对象与Math方法实例小结
Jul 05 Javascript
Webpack的Loader和Plugin的区别
Nov 09 Javascript
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
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
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
php判断当前操作系统类型
2015/10/28 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
简单的js分页脚本
2009/05/21 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python pass详细介绍及实例代码
2016/11/24 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
python实现在一个画布上画多个子图
2020/01/19 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
本科生求职简历的自我评价
2013/10/21 职场文书
中医专业职业生涯规划书范文
2014/01/04 职场文书
项目考察欢迎辞
2014/01/17 职场文书
自荐信如何制作?
2014/02/21 职场文书
社区元宵节活动总结
2015/02/06 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL