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


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 相关文章推荐
用jscript实现列出安装的软件列表
Jun 18 Javascript
利用毫秒减值计算时长的js代码
Sep 22 Javascript
JS比较两个时间大小的简单示例代码
Dec 20 Javascript
Node.js中的事件驱动编程详解
Aug 16 Javascript
javascript中checkbox使用方法实例演示
Nov 19 Javascript
js HTML5 Canvas绘制转盘抽奖
Sep 13 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
Apr 17 Javascript
使用javascript做在线算法编程
May 25 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
Aug 19 Javascript
vue中axios实现数据交互与跨域问题
May 12 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 Javascript
JS如何实现在弹出窗口中加载页面
Dec 03 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
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
php下连接mssql2005的代码
2011/01/17 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
超级简单的图片防盗(HTML),好用
2007/04/08 Javascript
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
js实现GIF图片的分解和合成
2019/10/24 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
python求pi的方法
2014/10/08 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
深入浅析python 中的匿名函数
2018/05/21 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
金山毒霸系列的笔试题
2013/04/13 面试题
应届大学生自荐信
2013/12/05 职场文书
长城导游词400字
2015/01/30 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
python turtle绘图
2022/05/04 Python