1.在 utils
文件中新建 mcaptcha.js
文件,寫入以下代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
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
文件中引入
1
|
let Mcaptcha = require( "../../../utils/mcaptcha.js" ); |
res.data
是要傳到mcaptcha.js
中的 code
值,也就是驗證碼,可以隨意寫為如:“ho55”,“a2sd”
等等。我這里是從后臺傳過來的數據,(前人寫的代碼,不好改動,只在前端加上干擾線和彩圖)。
1
2
3
4
5
6
|
new Mcaptcha({ el: 'canvas' , width: 100, height: 30, code: res.data }); |
wxml
文件, bindtap="getImgYZM"
是 new Mcaptcha
的方法名,再次點擊可以換驗證碼圖片。
1
2
3
|
<view bindtap= "getImgYZM" class= "yzm" > <canvas style= "width:{{cvs.width}};height:{{cvs.height}};" canvas-id= "canvas" ></canvas> </view> |
如果是在前端設置隨機數,可以在data:{}
里面寫
1
2
3
4
5
6
7
8
9
10
11
|
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#語言產生隨機數返給前端的代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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 ; } } } } |
到此這篇關于繪制微信小程序驗證碼功能的實例代碼的文章就介紹到這了,更多相關微信小程序驗證碼內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/cyapi/archive/2021/01/05/14234237.html