首页 > 编程语言 >微信小程序canvas验证码生成及使用

微信小程序canvas验证码生成及使用

时间:2023-01-05 09:33:22浏览次数:34  
标签:canvas min 微信 ctx 验证码 let options Math

先看效果:

 

 

wxml:

<canvas class="v-code" bindtap="changeImg" style="width:100px; height:40px;" canvas-id="canvas"></canvas>

js:

const MCAP = require('../../utils/mcaptcha');
Page({
    data: {
        codeStr: '', //生成的验证码
        code: '', //输入的验证码
    },
    /**
     * 更换验证码
     */
    changeImg: function () {
        this.initDraw();
    },
    /**
     * 制作验证码
     */
    initDraw: function () {
        var that = this;
        var codes = that.getRanNum();
        that.setData({
            codeStr: codes //生成的验证码
        })
        let mac = new MCAP({
            el: 'canvas',
            width: 100,
            height: 40,
            code: codes
        });
    },
    /**
     * 获取随机数
     */
    getRanNum: function () {
        var chars = '0123456789';
        // var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
        var pwd = '';
        for (var i = 0; i < 4; i++) {
            if (Math.random() < 10) {
                pwd += chars.charAt(Math.random() * 10 - 1);
            }
        }
        return pwd;
    },
    
})

mcaptcha.js代码:

module.exports = class Mcaptcha {
  constructor(options) {
    this.options = options;
    this.fontSize = options.height * 3 / 4;
    this.init();
    this.refresh(this.options.code);   
  }
  init() {
    this.ctx = wx.createCanvasContext(this.options.el);
    this.ctx.setTextBaseline("middle");
    this.ctx.setFillStyle(this.randomColor(180, 240));
    this.ctx.fillRect(0, 0, this.options.width, this.options.height);
  }
  refresh(code) {
    let arr = (code + '').split('');
    if (arr.length === 0) {
      arr = ['e', 'r', 'r', 'o', 'r'];
    };
    let offsetLeft = this.options.width * 0.6 / (arr.length - 1);
    let marginLeft = this.options.width * 0.2;
    arr.forEach((item, index) => {
      this.ctx.setFillStyle(this.randomColor(0, 180));      
      let size = this.randomNum(24, this.fontSize);
      this.ctx.setFontSize(size);
      let dis = offsetLeft * index + marginLeft - size * 0.3;
      let deg = this.randomNum(-30, 30);
      this.ctx.translate(dis, this.options.height * 0.5);
      this.ctx.rotate(deg * Math.PI / 180);
      this.ctx.fillText(item, 0, 0);
      this.ctx.rotate(-deg * Math.PI / 180);
      this.ctx.translate(-dis, -this.options.height * 0.5);
    })
    this.ctx.draw();
  }
  randomNum(min, max) {
    return Math.floor(Math.random() * (max - min) + min);
  }
  randomColor(min, max) {
    let r = this.randomNum(min, max);
    let g = this.randomNum(min, max);
    let b = this.randomNum(min, max);
    return "rgb(" + r + "," + g + "," + b + ")";
  }
}

  

标签:canvas,min,微信,ctx,验证码,let,options,Math
From: https://www.cnblogs.com/btsn/p/17026597.html

相关文章

  • uni-app跨平台开发(微信小程序为主线)
    一. 说明 官网:https://uniapp.dcloud.net.cn/     二.        三.目录        !作       者:Yaopengf......
  • 微信支付--JSAPI支付(微信小程序和微信公众号支付都可以采用该方式)
    本实例使用了工具包SKIT.FlurlHttpClient.Wechat.TenpayV3(github:https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat)示例中的_repositoryWrapper的相关......
  • 【记者团】微信后台编辑
    每次发官微推文前一定要“预览”到手机上看,因为有的效果可能不相同。上传视频时一定在勾选“原创”,否则上传较长视频时会出现“解码错误”。如图表示未勾选如果“第一篇图文......
  • 微信小程序基础之媒体(图片,音频,视频)和地图的使用
    好久没有写过关于微信小程序的Demo了,今天向大家展示的关于媒体(图片,音频,视频)和地图的使用方法,希望对大家有所帮助,不喜勿喷,谢谢~代码中都有必要的文字注释,部分代码如下:图片:<!-......
  • Unity2019学习:常用功能--Canvas画布
    Canvas(画布)游戏对象是其他UnityUI的基础,其他的UnityUI必须是Canvas(画布)游戏对象的下级游戏对象。当UI内容发生变化的时候,是以画布为单位进行重绘,合理的将内容分配到不同的......
  • 12微信小程序
    目录1微信小程序简介 61.1概念 61.2同类产品 62微信小程序开发文档 62.1寻找开发文档 63微信小程序使用流程 74项目结构 74.1项目文件描述 75安装开发者工具及设......
  • 头像处理,随机验证码
     上传头像1.添加图片文件(可以上传成功,但前端无法展示)效果展示:   2.用户头像实时展示: 效果展示: 产生随机验证码需要用到的两个模块:1.pillow模块fro......
  • 答读者问总结 & 微信群欢迎你
    在《大学里最重要的七项学习》这篇广受在校学生欢迎的文章中,李开复老师说:就读大学时,你应当掌握七项学习,包括自修之道、基础知识、实践贯通、培养兴趣、积极主动、掌控时间、......
  • 图片验证码kaptcha基本用法
    本文主要内容Kaptcha在SpringBoot环境下的用法实例后端生成的验证码图片以Base64和流的形式响应给前端,渲染到HTML内容导览Kaptcha配置参数说明配置类KaptchaConf......
  • canvasToImage报错:_canvas2image2.default.convertToImage is not a function
    vue2+js项目,某个屏幕截图功能,报错:代码中用到的importcanvasToImagefrom'canvas2image';打印canvasToImage发现是{},那么canvasToImage.convertToImage自然会报错。......