微信公众号:创享日记
发送:手势密码
获取完整源码(导入微信开发者工具即可用)

以下可以忽略不看!

手势密码就是在手机触屏上设置一笔连成的九宫格图案,登录时画一下设定的图形。

运行程序,发现各个数字的个数,其中

4位的有1624个,5位的有7152个,6位的有26016个,7位的有72912个,8位的有140704个,9位的有140704个,总共有389112种!

​值得一提的是,6位以下的个数甚至每到10000种,所以设置密码最好设置6位以上的,当然不怕忘记的话,可以设置9位的变态密码。

目前app内常用的安全验证,有密码、手势、指纹、面部识别。你会发现从便利性&安全性从高到低的划分是,面部识别、指纹识别、手势、密码。随着时代和技术的进步,安全验证更加趋向于个人生物化。n年前,如果密码被a知道了,a完全可以通过密码/手势来获得和你同样的权利进行相关操作。现在,则可通过生物认证。指纹和面部识别来确定是否是本人进行操作,大大提升了产品的安全性。

使用手势密码登录时,如果输入错误,会对用户进行错误提示,提示后用户可以继续输入,当同一个账号输错达5次时,系统会自动退出登录,用户需要输入密码验证身份成功后才能进入app。​

在手势登录页面,也可以使用忘记手势密码登录,如果点击忘记手势密码,退出登录,输入密码验证身份成功后,页面跳转至手势密码设置页面,设置新的手势密码。设置完成后,会自动登录app。

function(){var wxlocker = function(obj){this.chooseType =  3; // 3*3的圆点格子};wxlocker.prototype.drawCle = function(x, y) { // 初始化解锁密码面板this.ctx.setStrokeStyle('#10AEFF');this.ctx.setLineWidth(1);this.ctx.beginPath();this.ctx.arc(x, y, this.r, 0, Math.PI * 2, true);this.ctx.closePath();this.ctx.stroke();}wxlocker.prototype.drawLine = function(po, lastPoint) {// 解锁轨迹this.ctx.beginPath();this.ctx.setLineWidth(1);this.ctx.moveTo(this.lastPoint[0].x, this.lastPoint[0].y);for (var i = 1 ; i < this.lastPoint.length ; i++) {this.ctx.lineTo(this.lastPoint[i].x, this.lastPoint[i].y);}this.ctx.lineTo(po.x, po.y);this.ctx.stroke();this.ctx.closePath();}wxlocker.prototype.createCircle = function() {// 创建解锁点的坐标,根据canvas的大小来平均分配半径var  cavW = this.setCanvasSize().w;var  cavH = this.setCanvasSize().h;var n = this.chooseType;var count = 0;this.r = cavW / (2 + 4 * n);// 公式计算this.lastPoint = [];this.arr = [];this.restPoint = [];var r = this.r;for (var i = 0 ; i < n ; i++) {for (var j = 0 ; j < n ; j++) {count++;var obj = {x: j * 4 * r + 3 * r,y: i * 4 * r + 3 * r,index: count};this.arr.push(obj);this.restPoint.push(obj);}}// this.ctx.clearRect(0, 0, cavW, cavH);for (var i = 0 ; i < this.arr.length ; i++) {this.drawCle(this.arr[i].x, this.arr[i].y);}wx.drawCanvas({canvasId: "locker",actions: this.ctx.getActions(),reserve:false});//return arr;}wxlocker.prototype.getPosition = function(e) {// 获取touch点相对于canvas的坐标// var rect = e.target;var po = {x: e.touches[0].x,y: e.touches[0].y};return po;}wxlocker.prototype.update = function(po) {// 核心变换方法在touchmove时候调用var  cavW = this.setCanvasSize().w;var  cavH = this.setCanvasSize().h;this.ctx.clearRect(0, 0, cavW, cavH);for (var i = 0 ; i < this.arr.length ; i++) { // 每帧先把面板画出来this.drawCle(this.arr[i].x, this.arr[i].y);}this.drawPoint();//  每帧画圆心this.drawLine(po , this.lastPoint);// 每帧画轨迹for (var i = 0 ; i < this.restPoint.length ; i++) {if (Math.abs(po.x - this.restPoint[i].x) < this.r && Math.abs(po.y - this.restPoint[i].y) < this.r) {this.drawPoint();this.lastPoint.push(this.restPoint[i]);this.restPoint.splice(i, 1);break;}}}wxlocker.prototype.checkPass = function(psw1, psw2) {// 检测密码var p1 = '',p2 = '';for (var i = 0 ; i < psw1.length ; i++) {p1 += psw1[i].index + psw1[i].index;}for (var i = 0 ; i < psw2.length ; i++) {p2 += psw2[i].index + psw2[i].index;}return p1 === p2;}wxlocker.prototype.storePass = function(psw,cb) {// touchend结束之后对密码和状态的处理if (this.pswObj.step == 1) {//step==1表示还没有设置密码状态if (this.checkPass(this.pswObj.fpassword, psw)) {this.pswObj.step = 2;this.pswObj.spassword = psw;this.resetHidden = false;this.title = "密码保存成功";this.titleColor = "succ";this.drawStatusPoint('#09bb07');wx.setStorageSync('passwordxx', JSON.stringify(this.pswObj.spassword));// wx.setStorageSync('chooseType', this.chooseType);} else {this.title = "两次绘制不一致,重新绘制";this.titleColor = "error";this.drawStatusPoint('#e64340');delete this.pswObj.step;}} else if (this.pswObj.step == 2) {if (this.checkPass(this.pswObj.spassword, psw)) {this.title = "解锁成功";this.titleColor = "succ";this.drawStatusPoint('#09bb07');cb();} else {this.title = "解锁失败";this.titleColor = "error";this.drawStatusPoint('#e64340');}} else {if(this.lastPoint.length<4){this.title="密码过于简单,请至少连接4个点";this.resetHidden = true;this.titleColor = "error";return false;}else{this.pswObj.step = 1;this.pswObj.fpassword = psw;this.titleColor = "";this.title = "再次输入";}}}wxlocker.prototype.makeState = function() {if (this.pswObj.step == 2) {this.resetHidden = false;this.title = "请解锁";this.titleColor = "";} else if (this.pswObj.step == 1) {this.title="请设置手势密码";this.resetHidden = true;this.titleColor = "";} else {this.title="请设置手势密码";this.resetHidden = true;this.titleColor = "";}}wxlocker.prototype.updatePassword = function(){//点击重置按钮,重置密码wx.removeStorageSync("passwordxx");// wx.removeStorageSync("chooseType");this.pswObj = {};this.title="请设置手势密码";this.resetHidden = true;this.titleColor = "";this.reset();}wxlocker.prototype.init = function() {//初始化锁盘this.pswObj = wx.getStorageSync('passwordxx') ? {step: 2,spassword: JSON.parse(wx.getStorageSync('passwordxx'))} : {};this.lastPoint = [];//记录手指经过的圆圈this.makeState();this.touchFlag = false;this.ctx = wx.createContext();//创建画布this.createCircle();//画圆圈}wxlocker.prototype.reset = function() {this.createCircle();}//适配不同屏幕大小的canvaswxlocker.prototype.setCanvasSize = function(){var size={};try {var res = wx.getSystemInfoSync();var scale = 750/686;//不同屏幕下canvas的适配比例;设计稿是750宽var width = res.windowWidth/scale;var height = width;//canvas画布为正方形size.w = width;size.h = height;} catch (e) {// Do something when catch errorconsole.log("获取设备信息失败"+e);} return size;}wxlocker.prototype.bindtouchstart = function(e){if(e.touches.length==1){var self = this;var po = self.getPosition(e);for (var i = 0 ; i < self.arr.length ; i++) {//判断手指触摸点是否在圆圈内if (Math.abs(po.x - self.arr[i].x) < self.r && Math.abs(po.y - self.arr[i].y) < self.r) {self.touchFlag = true;self.drawPoint();self.lastPoint.push(self.arr[i]);self.restPoint.splice(i,1);break;}}}wx.drawCanvas({canvasId: "locker",actions: this.ctx.getActions(),reserve:true});}

手势密码解锁微信小程序项目源码相关推荐

  1. 实用微信小程序项目源码

    微信小程序疯狂猜成语小程序源码UI美观 知识答题类小程序源码 200多套微信小程序源码带后台+教程+源码 校园小情书小程序前端+后端源码 微信版flappybird小游戏源码下载,经典像素鸟小游戏源码 ...

  2. 全网最全微信小程序项目源码

    查看全文 http://www.taodudu.cc/news/show-3737788.html 相关文章: 使用ColorUI构建小程序项目 [小程序从0到1]小程序项目的创建(项目目录结构) 微 ...

  3. 随机抽奖转盘微信小程序项目源码

    微信小程序:创享日记 发送:抽奖转盘 获取完整源码(微信开发者工具打开即可用) 可以容易自行修改,融入自己的项目里面. function formatTime(date) {var year = da ...

  4. 电影小程序微信小程序项目源码

    电影影视小程序前端加后端源码加教程.

  5. 微信小程序项目源码springboot在线考试系统小程序+后台管理系统|前后分离VUE.js

  6. 含文档+PPT+源码等]精品微信小程ssm便捷记账本小程序+后台管理系统|前后分离VUE[包运行成功]微信小程序项目源码Java毕业设计

  7. 微信小程序项目源码ssm校园跑腿+后台管理系统|前后分离VUE含论文+PPT+源码

  8. 微信小程序项目源码SSM美容预约+后台管理系统|前后分离VUE含论文+PPT+源码

  9. 微信小程序项目源码网上商城|电商+后台管理系统含论文+PPT+源码

  10. 微信小程序项目源码ssm校园二手交易小程序+后台管理系统|前后分离VUE含论文+PPT+源码

最新文章

  1. FPGA之道(78)静态时序分析(四)内部时钟相关时序分析
  2. linux下,每次git pull 或者git push都需要输入账号密码的问题以及git remote 的一些基本操作
  3. nginx 超时设置_Nginx最详细的反向代理配置步骤,拿去不谢
  4. C#序列化枚举为字符串和自定义转换器
  5. matlab 日期加小时数_将EXCEL 中的日期 时间 导入到MATLAB坐标轴中
  6. 用Ai制作立体logo
  7. 骇客学堂:网络入侵检测初步探测方法
  8. 记win10家庭版系统C:\Users用户名中文改英文 详细教程
  9. 教学设计-饭后百步走
  10. 撰写计算机专业调研报告,计算机实习调研报告.doc
  11. 【转】D365 FO第三方集成(四)---客户端调用
  12. LATEX 罗马数字的输入
  13. python反距离权重法_先从IDW(反距离权重)插值开始吧
  14. 纳米孔测序仪市场现状研究分析与发展前景预测报告
  15. 爬虫实战篇--更换代理ip
  16. 开设生物医学工程的高校(按区域划分)
  17. 戴尔m520的服务器型号,Dell服务器PowerEdge M520
  18. 大屏显示之动态词云组件
  19. 【深入浅出强化学习】2 马尔可夫决策过程
  20. 在股票技术指标里,EMA和SMA 的区别

热门文章

  1. 决策支持系统(DSS)
  2. XXX集团财务决策支持系统的起因(系列二)
  3. 关于casewhen...的用法
  4. 全球及中国硬盘用基板行业发展前景预测与投资战略规划研究报告2022-2028年
  5. springboot仓库管理系统的设计与实现(含论文)
  6. 简单好用的钉钉群消息助手
  7. MICRO SIM卡(SIM小卡)尺寸图及剪卡图解
  8. Linux系统下载并安装Redis
  9. 【FatFs】FAT32文件系统协议总结(理论+实践)
  10. 蜂鸣器发声程序c语言,基于51单片机蜂鸣器发声的C语言程序