使用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 相关文章推荐
原型方法的不同写法居然会影响调试的解决方法
Mar 08 Javascript
javascript实现焦点滚动图效果 具体方法
Jun 24 Javascript
JavaScript 变量、作用域及内存
Apr 08 Javascript
js获取url传值的方法
Dec 18 Javascript
很棒的一组js图片轮播特效
Jan 12 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
Sep 01 Javascript
vue2.0使用swiper组件实现轮播效果
Nov 27 Javascript
jQuery图片加载失败替换默认图片方法汇总
Nov 29 jQuery
JavaScript类的继承操作实例总结
Dec 20 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 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
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
测试php函数的方法
2013/11/13 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
Python 字典与字符串的互转实例
2017/01/13 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
python检索特定内容的文本文件实例
2018/06/05 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
Django 自定义分页器的实现代码
2019/11/24 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
windows下python安装pip方法详解
2020/02/10 Python
Python 多进程原理及实现
2020/12/21 Python
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
若干个Java基础面试题
2015/05/19 面试题
竞选班长演讲稿400字
2014/08/22 职场文书
新员工入职感言范文!
2019/07/04 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python