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


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 相关文章推荐
document.all与WEB标准
May 13 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
Nov 22 Javascript
javascript的push使用指南
Dec 05 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
JavaScript限定图片显示大小的方法
Mar 11 Javascript
javascript中replace( )方法的使用
Apr 24 Javascript
JQuery之proxy实现绑定代理方法
Aug 01 Javascript
JavaScript仿百度图片浏览效果
Nov 23 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
详解js的事件代理(委托)
Dec 22 Javascript
用js制作淘宝放大镜效果
Oct 28 Javascript
three.js中文文档学习之如何本地运行详解
Nov 20 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 FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
学习PHP session的传递方式
2016/06/15 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
js word表格动态添加代码
2010/06/07 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
Python常用小技巧总结
2015/06/01 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
详解python中的json和字典dict
2018/06/22 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
python实现高斯投影正反算方式
2020/01/17 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
python里glob模块知识点总结
2021/01/05 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
物理力学求职信
2014/02/18 职场文书
会计员岗位职责
2014/03/15 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
2014年终个人总结报告
2015/03/09 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript