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之querySelector和querySelectorAll使用说明
Oct 09 Javascript
Jquery实现仿腾讯微博发表广播
Nov 17 Javascript
微信小程序 wxapp导航 navigator详解
Oct 31 Javascript
vue.js学习之UI组件开发教程
Jul 03 Javascript
详解使用vue-admin-template的优化历程
May 20 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
Sep 27 Javascript
给localStorage设置一个过期时间的方法分享
Nov 06 Javascript
webpack 静态资源集中输出的方法示例
Nov 09 Javascript
VUE解决 v-html不能触发点击事件的问题
Oct 28 Javascript
JavaScript This指向问题详解
Nov 25 Javascript
Element Steps步骤条的使用方法
Jul 26 Javascript
vue 数据双向绑定的实现方法
Mar 04 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程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
PHP面向对象法则
2012/02/23 PHP
PHP Session 变量的使用方法详解与实例代码
2013/09/11 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
Python标准库之循环器(itertools)介绍
2014/11/25 Python
python中私有函数调用方法解密
2016/04/29 Python
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
简历的个人自我评价范文
2014/01/03 职场文书
公司司机岗位职责
2014/02/07 职场文书
银行服务感言
2014/03/01 职场文书
《开国大典》教学反思
2014/04/19 职场文书
护士自荐信范文
2015/03/25 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
详解Redis实现限流的三种方式
2021/04/27 Redis
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers