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


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 相关文章推荐
用Div仿showModalDialog模式菜单的效果的代码
Mar 05 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
Dec 29 Javascript
node.js操作mongoDB数据库示例分享
Nov 26 Javascript
XML、HTML、CSS与JS的区别整理
Feb 18 Javascript
原生js制作日历控件实例分享
Apr 06 Javascript
Js获取图片原始宽高的实现代码
May 17 Javascript
详解用vue编写弹出框组件
Jul 04 Javascript
微信小程序实现tab左右切换效果
Nov 15 Javascript
vue中引入第三方字体文件的方法示例
Dec 17 Javascript
详解使用uni-app开发微信小程序之登录模块
May 09 Javascript
vue实现记事本功能
Jun 26 Javascript
详解JS WebSocket断开原因和心跳机制
May 07 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 简单数组排序实现代码
2009/08/05 PHP
php中长文章分页显示实现代码
2012/09/29 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
理解javascript对象继承
2016/04/17 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
js实现图片推拉门效果代码实例
2019/05/18 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
Python爬取读者并制作成PDF
2015/03/10 Python
使用Python的PEAK来适配协议的教程
2015/04/14 Python
Python递归遍历列表及输出的实现方法
2015/05/19 Python
pycharm远程调试openstack的图文教程
2017/11/21 Python
OpenCV图像颜色反转算法详解
2019/05/13 Python
python中时间模块的基本使用教程
2019/05/14 Python
Python jieba库用法及实例解析
2019/11/04 Python
python程序输出无内容的解决方式
2020/04/09 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
办公用品质量保证书
2015/05/11 职场文书
老员工辞职信范文
2015/05/12 职场文书
中秋节祝酒词
2015/08/12 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript