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 相关文章推荐
利用javascript/jquery对上传文件格式过滤的方法
Jul 25 Javascript
JS按位非(~)运算符与~~运算符的理解分析
Jul 31 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
Dec 09 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
Jan 28 Javascript
JavaScript实现的链表数据结构实例
Apr 02 Javascript
详解Vue2.0里过滤器容易踩到的坑
Jun 01 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
Oct 31 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
Mar 07 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
Mar 01 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
Sep 26 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
Jun 05 Javascript
Bootstrap FileInput实现图片上传功能
Jan 28 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-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
vue表单数据交互提交演示教程
2019/11/13 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
python做量化投资系列之比特币初始配置
2018/01/23 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
python zip()函数的使用示例
2020/09/23 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
美国在线工具商店:Acme Tools
2018/06/26 全球购物
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
幼儿园小班家长寄语
2014/04/02 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python