使用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 相关文章推荐
jQuery示例收集
Nov 05 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
May 09 Javascript
JavaScript 函数模式详解及示例
Sep 07 Javascript
详解JavaScript树结构
Jan 09 Javascript
jQuery图片瀑布流的简单实现代码
Mar 15 Javascript
vue按需加载组件webpack require.ensure的方法
Dec 13 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
May 22 Javascript
JS学习笔记之原型链和利用原型实现继承详解
May 29 Javascript
小程序采集录音并上传到后台
Nov 22 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
Mar 12 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
javascript对象3个属性特征
Nov 17 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
JavaScript 五大常见函数
2018/03/23 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
Python实现的Kmeans++算法实例
2014/04/26 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
python实现函数极小值
2019/07/10 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
汽修专业学生自我鉴定
2013/11/16 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
听证通知书
2015/04/24 职场文书
读书笔记怎么写
2015/07/01 职场文书
情人节单身感言
2015/08/03 职场文书
幼儿园保教工作总结2015
2015/10/15 职场文书
护士业务学习心得体会
2016/01/25 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
MySQL kill不掉线程的原因
2021/05/07 MySQL
golang 实现并发求和
2021/05/08 Golang