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 相关文章推荐
学习ExtJS form布局
Oct 08 Javascript
js Html结构转字符串形式显示代码
Nov 15 Javascript
向当前style sheet中插入一个新的style实现方法
Apr 01 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
node.js中的console.time方法使用说明
Dec 09 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
Mar 03 Javascript
基于jQuery Ajax实现下拉框无刷新联动
Dec 06 jQuery
JS实现的简单tab切换功能完整示例
Jun 20 Javascript
JavaScript如何借用构造函数继承
Nov 06 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
May 10 Javascript
Angular+ionic实现折叠展开效果的示例代码
Jul 29 Javascript
Vue切换Tab动态渲染组件的操作
Sep 21 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 中dirname(_file_)讲解
2007/03/18 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
一段批量给页面上的控件赋值js
2010/06/19 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
javascript正则表达式总结
2016/02/29 Javascript
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
调研汇报材料范文
2014/08/17 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
python 爬取天气网卫星图片
2021/06/07 Python
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python