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 相关文章推荐
jQuery 使用手册(五)
Sep 23 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
Nov 18 Javascript
jquery对象和DOM对象的区别介绍
Aug 09 Javascript
JavaScript用Number方法实现string转int
May 13 Javascript
js自定义回调函数
Dec 13 Javascript
Jquery使用小技巧汇总
Dec 29 Javascript
详解Jquery实现ready和bind事件
Apr 14 Javascript
JS实现简单获取最近7天和最近3天日期的方法
Apr 18 Javascript
详解JS函数stack size计算方法
Jun 18 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
Sep 12 Javascript
原生JS实现无缝轮播图片
Jun 24 Javascript
详解TypeScript中的类型保护
Apr 29 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
javascript数组使用调用方法汇总
2007/12/08 Javascript
flexigrid 参数说明
2010/11/23 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
原生js开发的日历插件
2017/02/04 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
js实现无缝滚动图
2017/02/22 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
Webpack的dll功能使用
2018/06/28 Javascript
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
Python实现简易Web爬虫详解
2018/01/03 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
GNC健安喜官方海外旗舰店:美国著名保健品牌
2017/01/04 全球购物
SQL注入攻击的种类有哪些
2013/12/30 面试题
30年同学聚会邀请函
2014/01/25 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL