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


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 相关文章推荐
List all the Databases on a SQL Server
Jun 21 Javascript
javascript 设置文本框中焦点的位置
Nov 20 Javascript
javascript实现动态导入js与css等静态资源文件的方法
Jul 25 Javascript
详解JavaScript逻辑And运算符
Dec 04 Javascript
jQuery div拖拽用法实例
Jan 14 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
May 30 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
Nov 02 Javascript
详解React中的组件通信问题
Jul 31 Javascript
详解node Async/Await 更好的异步编程解决方案
May 10 Javascript
JavaScript类的继承操作实例总结
Dec 20 Javascript
纯JS实现五子棋游戏
May 28 Javascript
Nuxt的路由配置和参数传递方式
Nov 06 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
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
面试常见的js算法题
2017/03/23 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
python ElementTree 基本读操作示例
2009/04/09 Python
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
python批量同步web服务器代码核心程序
2014/09/01 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
分享python数据统计的一些小技巧
2016/07/21 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
开办化妆品公司创业计划书
2013/12/26 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
大学生见习报告范文
2014/11/03 职场文书
2015年女职工工作总结
2015/05/15 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers