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 1.5相关知识及他人笔记
Dec 16 Javascript
才发现的超链接js导致网页中GIF动画停止的解决方法
Nov 02 Javascript
javascript模拟地球旋转效果代码实例
Dec 02 Javascript
原生JavaScript制作微博发布面板效果
Mar 11 Javascript
使用three.js 画渐变的直线
Jun 05 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
Sep 04 Javascript
JS弹性运动实现方法分析
Dec 15 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
Feb 17 Javascript
Vue 单文件中的数据传递示例
Mar 21 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
Jun 13 Javascript
Vue 使用typescript如何优雅的调用swagger API
Sep 01 Javascript
解决vue打包报错Unexpected token: punc的问题
Oct 24 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
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
php-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
2018/05/08 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
vue项目中js-cookie的使用存储token操作
2020/11/13 Javascript
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
深入浅析python的第三方库pandas
2020/02/13 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
中文系学生自荐信范文
2013/11/13 职场文书
英语专业学生个人求职信
2014/01/28 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
盗窃案辩护词
2015/05/21 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python