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


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 相关文章推荐
Ajax::prototype 源码解读
Jan 22 Javascript
javascript 函数式编程
Aug 16 Javascript
js读取注册表的键值示例
Sep 25 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
Jun 19 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
Aug 24 Javascript
三个js循环的关键字示例(for与while)
Feb 16 Javascript
JavaScript中arguments和this对象用法分析
Aug 08 Javascript
小程序如何构建骨架屏
May 29 Javascript
js通过循环多张图片实现动画效果
Dec 19 Javascript
微信小程序通过websocket实时语音识别的实现代码
Aug 19 Javascript
vue中实现点击变成全屏的多种方法
Sep 27 Javascript
antd form表单数据回显操作
Nov 02 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 array_slice函数的使用以及参数详解
2008/08/30 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
Javascript动态绑定事件的简单实现代码
2010/12/25 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
Python的print用法示例
2014/02/11 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
python ---lambda匿名函数介绍
2019/03/13 Python
python3实现表白神器
2019/04/09 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
python groupby 函数 as_index详解
2019/12/16 Python
Pytorch释放显存占用方式
2020/01/13 Python
皮肤科医师岗位职责
2013/12/04 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
电焊工岗位职责
2014/03/06 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
万能检讨书
2015/01/27 职场文书
物流业务员岗位职责
2015/04/03 职场文书
运动会加油稿
2015/07/22 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python