微信小程序 canvas 生成随机验证码

https://blog.csdn.net/qq_16646819/article/details/81020245?utm_source=blogxgwz0

js

 1 // pages/bind/bind.js
 2 var app = getApp();
 3 var baseUrl = getApp().baseUrl;
 4 var ctx;
 5 Page({
 6
 7     /**
 8      * 页面的初始数据
 9      */
10     data: {
11         text: ‘‘,
12     },
13
14     /**
15      * 生命周期函数--监听页面加载
16      */
17     onLoad: function(options) {
18         var that = this;
19         drawPic(that);
20     },
21     change: function() {
22         var that = this;
23         drawPic(that);
24     },
25     mobile(e) {
26         this.setData({
27             mobile: e.detail.value
28         })
29     },
30 })
 1 function randomNum(min, max) {
 2     return Math.floor(Math.random() * (max - min) + min);
 3 }
 4 /**生成一个随机色**/
 5 function randomColor(min, max) {
 6     var r = randomNum(min, max);
 7     var g = randomNum(min, max);
 8     var b = randomNum(min, max);
 9     return "rgb(" + r + "," + g + "," + b + ")";
10 }
11
12 /**绘制验证码图片**/
13 function drawPic(that) {
14     ctx = wx.createCanvasContext(‘canvas‘);
15     /**绘制背景色**/
16     ctx.fillStyle = randomColor(180, 240); //颜色若太深可能导致看不清
17     ctx.fillRect(0, 0, 90, 28)
18     /**绘制文字**/
19     var arr;
20     var text = ‘‘;
21     var str = ‘ABCEFGHJKLMNPQRSTWXY123456789‘;
22     for (var i = 0; i < 4; i++) {
23         var txt = str[randomNum(0, str.length)];
24         ctx.fillStyle = randomColor(50, 160); //随机生成字体颜色
25         ctx.font = randomNum(20, 26) + ‘px SimHei‘; //随机生成字体大小
26         var x = 5 + i * 20;
27         var y = randomNum(20, 25);
28         var deg = randomNum(-20, 20);
29         //修改坐标原点和旋转角度
30         ctx.translate(x, y);
31         ctx.rotate(deg * Math.PI / 180);
32         ctx.fillText(txt, 5, 0);
33         text = text + txt;
34         //恢复坐标原点和旋转角度
35         ctx.rotate(-deg * Math.PI / 180);
36         ctx.translate(-x, -y);
37     }
38     /**绘制干扰线**/
39     for (var i = 0; i < 4; i++) {
40         ctx.strokeStyle = randomColor(40, 180);
41         ctx.beginPath();
42         ctx.moveTo(randomNum(0, 90), randomNum(0, 28));
43         ctx.lineTo(randomNum(0, 90), randomNum(0, 28));
44         ctx.stroke();
45     }
46     /**绘制干扰点**/
47     for (var i = 0; i < 20; i++) {
48         ctx.fillStyle = randomColor(0, 255);
49         ctx.beginPath();
50         ctx.arc(randomNum(0, 90), randomNum(0, 28), 1, 0, 2 * Math.PI);
51         ctx.fill();
52     }
53     ctx.draw(false, function() {
54         that.setData({
55             text: text
56         })
57     });
58 }

wxml:

<canvas canvas-id="canvas" bindtap=‘change‘></canvas>

wxss

canvas {
    width: 90px;
    height: 28px;
    border-radius: 14px;
}

验证方法:

先获取输入的 验证码的值,通过js的.tolowerCase();方法将输入的值中小写字母全部转成小写已达到验证码不区分大小写的目的,之后将输入的值与data中的text进行比较,不一致则验证码输入错误



原文地址:https://www.cnblogs.com/joe-tang/p/9802531.html

时间: 2024-07-30 08:48:05

微信小程序 canvas 生成随机验证码的相关文章

微信小程序 canvas 绘图问题总结

业务中碰到微信小程序需要生成海报进行朋友圈分享,这个是非常常见的功能,没想到实际操作的时候花了整整一天一夜才搞好,微信的 canvas 绘图实在是太难用了,官方快点优化一下吧. 业务非常简单,只需要将用到的图片,文案素材拼装到一张图片,保存到本地就可以了. 首先创建画布,将一张网上的图片画到画布上. const ctx = wx.createCanvasContext('shareCanvas'); ctx.drawImage("https://img3.doubanio.com/view/ph

微信小程序动态生成保存二维码

起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <canvas style="width: 350rpx;height: 350rpx;background:#f1f1f1;" canvas-id="mycanvas"/> js: // pages/qrcode/qrcode.js var QR = require("..

微信 小程序 canvas

测试手机为IPHONE6,开发者工具版本0.10.102800 微信小程序里的canvas 非 h5 canvas有很多不一样的地方,以下把微信小程序的canvas叫做wxcanvas 下面全是我一点点测试出的干货,耐心看: 1.wxcanvas,不像h5canvas那样有width和height属性和width和height的style样式.他只有style样式,可以理解为他就是个框吧: 2.wxcanvas不要当成真的H5canvas,就当它是个div就行,画出范围的东西也是存在的,改变wi

微信小程序 | canvas绘图

1.新的尺寸单位 rpx rpx(responsive pixel): 可以根据屏幕宽度进行自适应. 规定屏幕宽为750rpx.如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素. 设备 rpx换算px (屏幕宽度/750): px换算rpx (750/屏幕宽度) 2.小程序canvas总结 小程序绘制的单位是px, 基础知识点请参考文档 : canvas中存在一个坐标系,二维的,左上

微信小程序发送短信验证码完整实例

微信小程序注册完整实例,发送短信验证码,带60秒倒计时功能,无需服务器端.效果图: 代码: index.wxml <!--index.wxml--> <view class="container"> <view class='row'> <input placeholder='请输入姓名' bindinput='bindNameInput'/> </view> <view class='row'> <inpu

在微信小程序中生成一张分享海报?

前言 因产品需求,需要在小程序中生成一张分享海报用于产品推广.特此记录一波产出过程~ 这次开发使用的是  uni-app 来产出小程序 Part.1  大致思路 按照设计图将所需元素全部画入 Canvas 画布,再利用 wx.canvasToTempFilePath(Object object, Object this)  API 将 Canvas 生成一张指定大小的图片,保存分享即可~ 此API具体用法和注意事项可去 https://developers.weixin.qq.com/minip

用Canvas生成随机验证码(后端前端都可以)

一 .使用前端生成验证码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <canvas id="canvas" width="120" height="40"></canvas> <

微信小程序中的图形验证码

可以在utils中新建一个mcaptcha.js 代码如下: module.exports = class Mcaptcha { constructor(options) { this.options = options; this.fontSize = options.height * 3 / 6; this.init(); this.refresh(); } init() { this.ctx = wx.createCanvasContext(this.options.el); this.c

微信小程序 canvas 文字自动换行

Page({ drawCanvas: function(ctx) {// 地址 ctx.setFontSize(14) ctx.setFillStyle('#9E7240') ctx.textAlign="center"; const txHash = this.data.info.txHash ? this.data.info.txHash : '暂无信息' this.drawText(ctx,txHash,187, 517 , 232,232) // 自动换行 ctx.draw()