绘制微信小程序验证码功能的实例代码


Posted in Javascript onJanuary 05, 2021

1.在 utils 文件中新建 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('');
  let width = this.options.width;
  let height = this.options.height;
  let ctx = this.ctx;
  if (arr.length === 0) {
   arr = ['e', 'r', 'r','o','r'];
  };
  let offsetLeft = width * 0.6 / (arr.length - 1);
  let marginLeft = width * 0.2;
  arr.forEach((item, index) => {
   ctx.setFillStyle(this.randomColor(0, 180));
   let size = this.randomNum(24, this.fontSize);
   ctx.setFontSize(size);
   let dis = offsetLeft * index + marginLeft - size * 0.3;
   let deg = this.randomNum(-30, 30);
   ctx.translate(dis, height*0.5);
   ctx.rotate(deg * Math.PI / 180);
   ctx.fillText(item, 0, 0);
   ctx.rotate(-deg * Math.PI / 180);
   ctx.translate(-dis, -height * 0.5);
  })
  //绘制干扰线
  for (var i = 0; i < 2; i++) {
	  ctx.strokeStyle = this.randomColor(40, 180);
	  ctx.beginPath();
	  ctx.moveTo(this.randomNum(0, width), this.randomNum(0, height));
	  ctx.lineTo(this.randomNum(20, width), this.randomNum(2, height));
	  ctx.stroke();
  }
  //绘制干扰点
  for (var i = 0; i < 30; i++) {
	  ctx.fillStyle = this.randomColor(0, 255);
	  ctx.beginPath();
	  ctx.arc(this.randomNum(0, width), this.randomNum(0, height), 1, 0, 2 * Math.PI);
	  ctx.fill();
	 }
  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 + ")";
 }
}

2.在需要验证码的js文件中引入

let Mcaptcha = require("../../../utils/mcaptcha.js");

res.data 是要传到mcaptcha.js 中的 code 值,也就是验证码,可以随意写为如:“ho55”,“a2sd” 等等。我这里是从后台传过来的数据,(前人写的代码,不好改动,只在前端加上干扰线和彩图)。

new Mcaptcha({
  el: 'canvas',
  width: 100,
  height: 30,
  code: res.data
});

wxml 文件, bindtap="getImgYZM"new Mcaptcha 的方法名,再次点击可以换验证码图片。

<view bindtap="getImgYZM" class="yzm">
  <canvas style="width:{{cvs.width}};height:{{cvs.height}};" canvas-id="canvas"></canvas>
</view>

如果是在前端设置随机数,可以在data:{} 里面写

data: {
   str:"0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z",
   randStr:""
 }
//获取随机数
var res = "";
for(var i = 0; i < str.length ; i ++) {
  var id = Math.ceil(Math.random()*35);
  res += chars[id];
}
return res;

这一步可不看,以下是后端C#语言产生随机数返给前端的代码:

using JobClass;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.SessionState;

namespace WebSite.pcode
{
  /// <summary>
  /// getcode 的摘要说明
  /// </summary>
  public class getcode : IHttpHandler, IRequiresSessionState
  {
    public void ProcessRequest(HttpContext context)
    {
      context.Response.ContentType = "text/plain";
      string str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z";
      string randStr = "";
      //生成随机数 Random
      Random randobj = new Random();
      string[] arr = str.Split(',');
      for (int i = 0; i < 4; i++)
      {
        randStr += arr[randobj.Next(arr.Length)];
      }
      context.Response.Write(randStr);
      return;
    }
    public bool IsReusable
    {
      get
      {
        return false;
      }
    }
  }
}

到此这篇关于绘制微信小程序验证码功能的实例代码的文章就介绍到这了,更多相关微信小程序验证码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Javascript 中的 call 和 apply使用介绍
Feb 22 Javascript
20行代码实现的一个CSS覆盖率测试脚本
Jul 07 Javascript
JS下拉缓冲菜单示例代码
Aug 30 Javascript
javascript中数组的多种定义方法和常用函数简介
May 09 Javascript
javascript结合ajax读取txt文件内容
Dec 05 Javascript
JavaScript动态添加style节点的方法
Jun 09 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
Sep 04 Javascript
ES6下React组件的写法示例代码
May 04 Javascript
Vue自定义指令使用方法详解
Aug 21 Javascript
详解Vuex中mapState的具体用法
Sep 28 Javascript
详解vue配置后台接口方式
Mar 29 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
Nov 25 Javascript
详解JavaScript中分解数字的三种方法
Jan 05 #Javascript
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 #Vue.js
mapboxgl实现带箭头轨迹线的代码
Jan 04 #Javascript
jenkins自动构建发布vue项目的方法步骤
Jan 04 #Vue.js
vue3弹出层V3Popup实例详解
Jan 04 #Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 #Vue.js
three.js显示中文字体与tween应用详析
Jan 04 #Javascript
You might like
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
javascript简单实现命名空间效果
2014/03/06 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
Python selenium如何设置等待时间
2016/09/15 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
Python pickle模块实现对象序列化
2019/11/22 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
python如何设置静态变量
2020/09/07 Python
Python基于execjs运行js过程解析
2020/11/27 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
加热夹克:RAVEAN
2018/10/19 全球购物
Oracle快照(snapshot)
2015/03/13 面试题
JAVA高级程序员面试题
2013/09/06 面试题
教师对学生的评语
2014/04/28 职场文书
婚纱店策划方案
2014/05/22 职场文书
大二学生自我检讨书
2014/10/23 职场文书
干部考察材料范文
2014/12/24 职场文书
疾病证明书
2015/06/19 职场文书
电台广播稿范文
2015/08/19 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技