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 相关文章推荐
简明json介绍
Sep 28 Javascript
jquery判断浏览器类型的代码
Nov 05 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
Jan 22 Javascript
JavaScript中自定义事件用法分析
Dec 23 Javascript
js 判断一组日期是否是连续的简单实例
Jul 11 Javascript
jquery之别踩白块游戏的简单实现
Jul 25 Javascript
create-react-app 修改为多入口编译的方法
Aug 01 Javascript
使用angularjs.foreach时return的问题解决
Sep 30 Javascript
如何获取vue单文件自身源码路径
May 06 Javascript
详解如何探测小程序返回到webview页面
May 14 Javascript
在vue中实现嵌套页面(iframe)
Jul 30 Javascript
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
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 error_log 函数的使用
2009/04/13 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
python如何实现单链表的反转
2020/02/10 Python
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
影视制作岗位职责
2013/12/04 职场文书
25岁生日感言
2014/01/13 职场文书
员工试用期自我评价
2014/09/18 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
社区国庆节活动总结
2015/03/23 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
高中班主任寄语
2019/06/21 职场文书
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
pandas数值排序的实现实例
2021/07/25 Python
python开发的自动化运维工具ansible详解
2021/08/07 Python
javascript的setTimeout()使用方法总结
2021/11/20 Javascript