首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >react的前端验证码

react的前端验证码

作者头像
一粒小麦
发布2019-07-18 17:14:17
3.2K0
发布2019-07-18 17:14:17
举报
文章被收录于专栏:一Li小麦一Li小麦

验证码一定是人类史上比较伟大的发明,坑了机器人也坑了自己。

后端同事比较懒。验证码居然前端来弄。言归正传,验证码的功能主要是

  • 不被机器轻松破解
  • 人眼很好识别

完整代码: https://github.com/dangjingtao/vccode效果预览

主要功能:

  • 随机生成4个 大 / 小写英文字母 / 阿拉伯数字
  • 随机干扰线防止机器轻松破解
  • 点击刷新验证码
  • dom 结构优化

第一步随机生成4个 大 / 小写英文字母 / 阿拉伯数字

  getRandom(max, min, num) {
    const asciiNum = ~~(Math.random()*(max-min+1)+min)
    if(!Boolean(num)){
      return asciiNum
    }
    const arr = []
    for(let i = 0; i < num; i++){
      arr.push(this.getRandom(max, min))
    }
    return arr
  }1234567891011

首先封装了一个函数,主要功能为生成 1 个或者多个随机数,如果为多个则存放在数组中

~~ 为位操作符取整, 类似于 Math.floor() ,需慎用,因为不够精准

调用

有了这个函数就可以肆意的搞起来了,首先我们要随机出四个 字母或者数字在 state 初始化的时候。 因为点击刷新的时候需要频繁调用,所以把初始化 state 的封成一个函数

  initState(){
    return {
      data: this.getRandom(109,48,4),
      rotate: this.getRandom(75,-75,4),
      fz: this.getRandom(8,20,4),
      color: [this.getRandom(100,255,3),this.getRandom(100,255,4),this.getRandom(100,255,3),this.getRandom(100,255,3)]
    }
  }12345678

data 为四个字母,使用的 ascii 表的值,抛去其中一些不使用的符号 rotate 为字母旋转的角度, 为了用户体验,不用旋转 180° ! fz 为字体大小 color 为字体颜色,rgb 模式

一切处理好了之后代码应该是这样子的

class VCode extends Component {
  constructor(props) {
    super(props)
    this.state = {
      ...this.initState()
    }
  }

  initState(){
    return {
      data: this.getRandom(109,48,4),
      rotate: this.getRandom(75,-75,4),
      fz: this.getRandom(8,20,4),
      color: [this.getRandom(100,255,3),this.getRandom(100,255,4),this.getRandom(100,255,3),this.getRandom(100,255,3)]
    }
  }

  getRandom(max, min, num) {
    const asciiNum = ~~(Math.random()*(max-min+1)+min)
    if(!Boolean(num)){
      return asciiNum
    }
    const arr = []
    for(let i = 0; i < num; i++){
      arr.push(this.getRandom(max, min))
    }
    return arr
  }

  render() {
    return ()
  }

}

正常情况下应为后台生成验证码。 在没有后台或者自己的一些小 demo 的时候可以前端自己生成。

安全为主

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一Li小麦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主要功能:
    • 第一步随机生成4个 大 / 小写英文字母 / 阿拉伯数字
      • 调用
      相关产品与服务
      验证码
      腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档