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


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 相关文章推荐
input 输入框内的输入事件详细分析
Mar 17 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
Nov 30 Javascript
JS组件中bootstrap multiselect两大组件较量
Jan 26 Javascript
JQuery ztree带筛选、异步加载实例讲解
Feb 25 Javascript
js实现多图左右切换功能
Aug 04 Javascript
JS转换HTML转义符的方法
Aug 24 Javascript
JavaScript设计模式之单体模式全面解析
Sep 09 Javascript
详解利用 Express 托管静态文件的方法
Sep 18 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
JS实现的合并两个有序链表算法示例
Feb 25 Javascript
js 执行上下文和作用域的相关总结
Feb 08 Javascript
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 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的十大要点(上)
2009/02/04 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
php表单提交实例讲解
2015/11/12 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
浅谈js原生拖放
2016/11/21 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
几种响应式文字详解
2017/05/19 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
python实现C4.5决策树算法
2018/08/29 Python
python中while和for的区别总结
2019/06/28 Python
Django Rest framework频率原理与限制
2019/07/26 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
物业电工岗位职责
2013/11/20 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
勤俭节约主题班会
2015/08/13 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python