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


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 相关文章推荐
js中匿名函数的N种写法
Sep 08 Javascript
Jquery 模板数据绑定插件的使用方法详解
Jul 08 Javascript
javascript利用apply和arguments复用方法
Nov 25 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
Jan 23 Javascript
js实现对table的增加行和删除行的操作方法
Oct 13 Javascript
原生js实现无限循环轮播图效果
Jan 20 Javascript
vue中如何创建多个ueditor实例教程
Nov 14 Javascript
微信小程序中进行地图导航功能的实现方法
Jun 29 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
Jan 28 Javascript
小程序组件之自定义顶部导航实例
Jun 12 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
Nov 06 Javascript
vue 页面跳转的实现方式
Jan 12 Vue.js
详解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个人网站架设连环讲(四)
2006/10/09 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
node中Express 动态设置端口的方法
2017/08/04 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
Python的Django框架中的数据过滤功能
2015/07/17 Python
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
python线性插值解析
2020/07/05 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
生产车间实习自我鉴定
2013/09/23 职场文书
农业资源与环境专业自荐信范文
2013/12/30 职场文书
大型会议接待方案
2014/03/01 职场文书
社区班子对照检查材料
2014/08/27 职场文书
五好家庭事迹材料
2014/12/20 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
教你用python控制安卓手机
2021/05/13 Python
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android
英镑符号 £
2022/02/17 杂记
详解TypeScript的基础类型
2022/02/18 Javascript