js+h5 canvas实现图片验证码


Posted in Javascript onOctober 11, 2020

本文实例为大家分享了js+h5 canvas实现图片验证码的具体代码,供大家参考,具体内容如下

实现效果

js+h5 canvas实现图片验证码

一、使用技术

原生js技术+html5 canvas画图

利用Math.random()函数随机生成 颜色 字符串  及障碍物

点击 验证码可变更验证码图案

二、使用步骤

1.html+css

代码如下(示例):

<div class="login_code_box">
        <div class="login_code">
         <input type="text" name="login_code" id="login_code" placeholder="请输入验证码">
                
 
        </div>
        <canvas id="canvas" >
 
        </canvas>
     <!-- <img src="" alt="" title="看不清?单击此处刷新" class="login_code_img" > -->
</div>
#canvas{
  width: 130px;
  height: 45px;
  display: inline-block;
  border: 1px solid #c9c9c9;
  border-radius: 5px;
  
}

2.js

代码如下(示例):

//验证码生成
let canvas=document.getElementById('canvas')//画布对象
 
let show_num=[]//装验证码的数组
//产生随机颜色
function randomColor(){
  var r= Math.floor( Math.random()*256);
  var g= Math.floor( Math.random()*256);
  var b= Math.floor( Math.random()*256);
  return "rgb("+r+","+g+","+b+") "
}
//画布
function draw(show_num){
  let canvas_clientWidth=document.getElementById('canvas').clientWidth//画布长度
  let canvas_clientHeight=document.getElementById('canvas').clientHeight//画布高度
  let context = canvas.getContext("2d")//画布环境 创建 context 对象:
  canvas.width=canvas_clientWidth
  canvas.height=canvas_clientHeight
  let str="A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m";
  let astr=str.split(',');//分割字符串形成数组
  let sLength=astr.length;//数组长度
  for (let i = 0; i <= 3; i++) {
    let j=Math.floor(Math.random()*sLength);//随机索引
    let deg=Math.random()*30*Math.PI/180;//0-30随机弧度
    let text=astr[j];//随机字符
    show_num[i]=text//验证码字符数组
    let x=10+i*20//x坐标
    let y=20+Math.random()*8//y坐标
    //位移 旋转角度 颜色 文字 样式开始位置
    context.font='bold 23px 微软雅黑'
    context.translate(x, y);
    context.rotate(deg);
    context.fillStyle = randomColor();
    context.fillText(text,0,0)
    context.rotate(-deg)
    context.translate(-x,-y)
  }
  //验证码显示小点
  for(let i=0;i<=30;i++){
   context.strokeStyle=randomColor()//设置随机色用小点的颜色
   context.beginPath();//开始一条路径
   let m=Math.random()*canvas_clientWidth;
   let n=Math.random()*canvas_clientHeight;
   context.moveTo(m,n)//移动
   context.lineTo(m + 1, n + 1);//添加一个新点,然后在画布中创建从该点到最后指定点的线条
   context.stroke();//画上面定义好的路径
  }
  //验证码显示线条
  for (let i = 0; i < 8; i++) {
    context.strokeStyle=randomColor()
    context.beginPath()
    context.moveTo(Math.random()*canvas_clientWidth,Math.random()*canvas_clientHeight);
    context.lineTo(Math.random()*canvas_clientWidth,Math.random()*canvas_clientHeight)
    context.stroke()
    
  }
 
}
draw(show_num)
console.log(show_num);
 
canvas.onclick=()=>{
draw(show_num)
console.log(show_num);
}

总结

创建canvas画布,利用随机函数,创建随机颜色 。

draw()函数,用于验证码的生成。字符串分隔存入数组

循环遍历生成验证码的个数

给当前字符串一个位移及旋转角度 文字样式等

随机函数生成小点及线段 context.stroke()画好以上定义好的颜色 位移长短的路径,并显示在canvas画布上

点击canvas画布 可重新生成验证码内容

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Opacity.js
Jan 22 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
Dec 09 Javascript
IE不支持getElementsByClassName最终完美解决方案
Dec 17 Javascript
分析Node.js connect ECONNREFUSED错误
Apr 09 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
Sep 15 Javascript
jQuery使用之标记元素属性用法实例
Jan 19 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
Nov 26 Javascript
jQuery获取table行数并输出单元格内容的实现方法
Jun 30 Javascript
解决Mac安装thrift因bison报错的问题
May 17 Javascript
js canvas实现星空连线背景特效
Nov 01 Javascript
javascript实现文字跑马灯效果
Jun 18 Javascript
详解JavaScript中Arguments对象用途
Aug 30 Javascript
vue2和vue3的v-if与v-for优先级对比学习
Oct 10 #Javascript
如何手写简易的 Vue Router
Oct 10 #Javascript
如何手写一个简易的 Vuex
Oct 10 #Javascript
echarts实现晶体球面投影的实例教程
Oct 10 #Javascript
详解Vue中Axios封装API接口的思路及方法
Oct 10 #Javascript
在Vue中使用Echarts实例图的方法实例
Oct 10 #Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
Oct 09 #Javascript
You might like
php判断ip黑名单程序代码实例
2014/02/24 PHP
php中的ini配置原理详解
2014/10/14 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
form中限制文本字节数js代码
2007/06/10 Javascript
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
node安装--linux下的快速安装教程
2017/03/21 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python文件和流(实例讲解)
2017/09/12 Python
Python构建网页爬虫原理分析
2017/12/19 Python
EM算法的python实现的方法步骤
2018/01/02 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
环卫个人总结
2015/03/03 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
夏洛特的网观后感
2015/06/15 职场文书
Django migrate报错的解决方案
2021/05/20 Python
zabbix监控mysql的实例方法
2021/06/02 MySQL
Go语言并发编程 sync.Once
2021/10/16 Golang