日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

繪制微信小程序驗(yàn)證碼

 路人甲Java 2021-08-29
  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();
    }
    //繪制干擾點(diǎn)
    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();
  }
    //設(shè)置隨機(jī)數(shù)的顏色
  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 + ")";
  }
}
  1. 在需要驗(yàn)證碼的js文件中引入
let Mcaptcha = require("../../../utils/mcaptcha.js");
  1. res.data 是要傳到mcaptcha.js 中的 code 值,也就是驗(yàn)證碼,可以隨意寫為如:“ho55”,“a2sd” 等等。我這里是從后臺傳過來的數(shù)據(jù),(前人寫的代碼,不好改動,只在前端加上干擾線和彩圖)。
new Mcaptcha({
    el: 'canvas',
    width: 100,
    height: 30,
    code: res.data
});
  1. wxml 文件, bindtap="getImgYZM"new Mcaptcha 的方法名,再次點(diǎn)擊可以換驗(yàn)證碼圖片。
<view bindtap="getImgYZM" class="yzm">
    <canvas style="width:{{cvs.width}};height:{{cvs.height}};" canvas-id="canvas"></canvas>
</view>

如果是在前端設(shè)置隨機(jī)數(shù),可以在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:""
 }
//獲取隨機(jī)數(shù)
var res = "";
for(var i = 0; i < str.length ; i ++) {
    var id = Math.ceil(Math.random()*35);
    res += chars[id];
}
return res;

這一步可不看,以下是后端C#語言產(chǎn)生隨機(jī)數(shù)返給前端的代碼:

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 = "";
            //生成隨機(jī)數(shù)  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;
            }
        }
    }
}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約