使用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 相关文章推荐
在JavaScript中,为什么要尽可能使用局部变量?
Apr 06 Javascript
ext checkboxgroup 回填数据解决
Aug 21 Javascript
js下用eval生成JSON对象
Sep 17 Javascript
jQuery 下拉列表 二级联动插件分享
Mar 29 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
Nov 21 Javascript
jQuery自定义事件的简单实现代码
Jan 27 Javascript
javascript模拟C#格式化字符串
Aug 26 Javascript
原生js实现放大镜特效
Mar 08 Javascript
JS遍历DOM文档树的方法实例详解
Apr 03 Javascript
使用Angular自定义字段校验指令的方法示例
Feb 01 Javascript
JavaScript闭包相关知识解析
Oct 19 Javascript
js实现倒计时秒杀效果
Mar 25 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
php数组(array)输出的三种形式详解
2013/06/05 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
DOM 事件流详解
2015/01/20 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
javascript实现密码验证
2015/11/10 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
移动端界面的适配
2017/01/11 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
Python命令启动Web服务器实例详解
2017/02/23 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
Django model select的多种用法详解
2019/07/16 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
在Django中实现添加user到group并查看
2019/11/18 Python
如何在python中执行另一个py文件
2020/04/30 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
卫生巾广告词
2014/03/18 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
心灵捕手观后感
2015/06/02 职场文书
python+opencv实现目标跟踪过程
2022/06/21 Python