使用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 相关文章推荐
判断脚本加载是否完成的方法
May 26 Javascript
jQuery中prevAll()方法用法实例
Jan 08 Javascript
jquery通过ajax加载一段文本内容的方法
Jan 15 Javascript
详解JavaScript中Date.UTC()方法的使用
Jun 12 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
Jun 05 Javascript
js完整倒计时代码分享
Sep 18 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
Jan 12 Javascript
Vue页面骨架屏注入方法
May 13 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
vue项目中使用fetch的实现方法
Apr 25 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
May 16 Javascript
node crawler如何添加promise支持
Feb 01 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
模仿OSO的论坛(一)
2006/10/09 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
理解JS事件循环
2016/01/07 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
如何利用Fabric自动化你的任务
2016/10/20 Python
python opencv之SURF算法示例
2018/02/24 Python
Python自定义线程类简单示例
2018/03/23 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
不用游标的SQL语句有哪些
2012/09/07 面试题
木工主管岗位职责
2013/12/08 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis