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 相关文章推荐
一个很酷的拖动层的js类,兼容IE及Firefox
Jun 23 Javascript
JavaScript 三种创建对象的方法
Oct 16 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
Oct 08 Javascript
关于jquery的多个选择器的使用示例
Oct 18 Javascript
jQuery制作仿Mac Lion OS滚动条效果
Feb 10 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
Sep 06 Javascript
angularjs 表单密码验证自定义指令实现代码
Oct 27 Javascript
javascript实现消灭星星小游戏简单版
Nov 15 Javascript
js实现select下拉框选择
Jan 11 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
Apr 10 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
May 23 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
Aug 04 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
第七节--类的静态成员
2006/11/16 PHP
PHP的PSR规范中文版
2013/09/28 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
JavaScript 指导方针
2007/04/05 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
详解Python 解压缩文件
2019/04/09 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
大学生未来职业生涯规划书
2014/02/15 职场文书
中队活动总结
2014/08/27 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
分居协议书范本
2014/11/03 职场文书
公司2014年度工作总结
2014/12/10 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫
正则表达式基础与常用验证表达式
2022/06/16 Javascript