js+canvas绘制图形验证码


Posted in Javascript onSeptember 21, 2020

本文实例为大家分享了利用canvas绘制图形验证码的具体代码,供大家参考,具体内容如下

思路:通过随机获取指定字符串的指定数的字符,通过canvas绘制出来

返回指定范围的随机整数

//指定范围的随机函数:返回指定范围内的随机整数
function rand(min, max) {
    /*
    max=10
    min=1

      Math.random()=0  最小取到1
      Math.random()=0.9999*10=Math.floor(9.9)=>+1=10

    */
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }

返回指定数量的随机字符串

function randStr(count) {
    var str = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    var code = '';
    for (var i = 0; i < count; i++) {

      var index = rand(0, str.length - 1)//必须减一否则会出现下标越界
      code += str.charAt(index) + ' ';
    }
    return code
  }

绘制图形

function verify(selector) {
    //获取canvas的dom对象
    var cas = document.querySelector(selector);
    //获取上下文对象
    var ctx = cas.getContext('2d');
    //指定接收的字符串
    var code = randStr(5);

    //绘制矩形,作背景色
    ctx.fillStyle = 'orange';
    //绘制实心矩形
    ctx.fillRect(0, 0, 160, 50)


    //文字居中
    // ctx.textAlign = 'left'
    //字体样式的属性要遵循css中的书写顺序
    ctx.font = '900 24px 宋体'
    //设置字体颜色
    ctx.fillStyle = '#FFF';
    //绘制文字
    ctx.fillText(code, 20, 30);
  }

鼠标点击更新验证码

document.querySelector('canvas').addEventListener('click', function () {
    verify('canvas')
  })

完整代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>绘制图形验证码</title>
  <style>
    canvas {
      border: 1px solid red;
    }
  </style>
</head>

<body>
  <canvas width="160" height="50"></canvas>
</body>
<script>

  verify('canvas')
  document.querySelector('canvas').addEventListener('click', function () {
    verify('canvas')
  })
  function verify(selector) {
    //获取canvas的dom对象
    var cas = document.querySelector(selector);
    //获取上下文对象
    var ctx = cas.getContext('2d');
    //指定接收的字符串
    var code = randStr(5);

    //绘制矩形,作背景色
    ctx.fillStyle = 'orange';
    //绘制实心矩形
    ctx.fillRect(0, 0, 160, 50)

    //字体样式的属性要遵循css中的书写顺序
    ctx.font = '900 24px 宋体'
    //设置字体颜色
    ctx.fillStyle = '#FFF';
    //绘制文字
    ctx.fillText(code, 20, 30);
  }




  //指定范围的随机函数:返回指定范围内的随机整数
  function rand(min, max) {
    /*
    max=10
    min=1

      Math.random()=0  最小取到1
      Math.random()=0.9999*10=Math.floor(9.9)=>+1=10

    */
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }

  //返回随机字符串
  function randStr(count) {
    var str = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    var code = '';
    for (var i = 0; i < count; i++) {

      var index = rand(0, str.length - 1)//必须减一否则会出现下标越界
      code += str.charAt(index) + ' ';
    }
    return code
  }
  // console.log(randStr(6))
</script>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
jquery图片上下tab切换效果
Mar 18 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
Jan 08 Javascript
web网页按比例显示图片实现原理及js代码
Aug 09 Javascript
chrome下jq width()方法取值为0的解决方法
May 26 Javascript
基于jquery实现的可编辑下拉框实现代码
Aug 02 Javascript
jQuery使用之标记元素属性用法实例
Jan 19 Javascript
jQuery实现CheckBox全选、全不选功能
Jan 11 Javascript
Angular4实现图片上传预览路径不安全的问题解决
Dec 25 Javascript
js验证账户名是否重复
May 26 Javascript
JS中的继承操作实例总结
Jun 06 Javascript
浅谈es6中的元编程
Dec 01 Javascript
vue中路由跳转不计入history的操作
Sep 21 #Javascript
JS实现放大镜效果
Sep 21 #Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 #Javascript
Vue Element校验validate的实例
Sep 21 #Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
Sep 21 #Javascript
vue3.0 上手体验
Sep 21 #Javascript
微信小程序实现点击页面出现文字
Sep 21 #Javascript
You might like
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
PHP可变变量学习小结
2015/11/29 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
JavaScript小技巧 2.5 则
2010/09/12 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
javascript打印输出json实例
2013/11/11 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
在Python中操作字典之update()方法的使用
2015/05/22 Python
Python 爬虫图片简单实现
2017/06/01 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
linux比较文件内容的命令是什么
2015/09/23 面试题
代收款委托书范本
2014/10/01 职场文书
售后服务质量承诺书
2015/04/29 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书