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 相关文章推荐
Prototype使用指南之base.js
Jan 10 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
Mar 09 Javascript
IE中createElement需要注意的一个问题
Jul 13 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
Jun 27 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
Aug 22 Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 Javascript
JS获取下拉框显示值和判断单选按钮的方法
Jul 09 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
Oct 29 Javascript
轻松学习Javascript闭包函数
Dec 15 Javascript
快速搭建React的环境步骤详解
Nov 06 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
Mar 16 Javascript
vue实现滑动超出指定距离回顶部功能
Jul 31 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 注释规范
2012/03/29 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
js闭包实例汇总
2014/11/09 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
2018/05/30 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
Python实现仿射密码的思路详解
2020/04/23 Python
python的dict判断key是否存在的方法
2020/12/09 Python
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
班长竞选演讲稿
2014/04/24 职场文书
2014年体育工作总结
2014/11/24 职场文书
小升初自荐信范文
2015/03/05 职场文书
社区低保工作总结2015
2015/07/23 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
MySQL数据管理操作示例讲解
2022/12/24 MySQL