栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

【redis】go+redis模拟验证码功能

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【redis】go+redis模拟验证码功能

写在前面

在B站看redis教程,老师做了一个java+redis模拟验证码验证得功能。于是,我把它转换成了go来实现。

1.要求

1.每个手机每天只能发送3次验证码
2.每次接收得验证码2分钟内有效。

2.分析

1.对于要求1,我们可以每个手机号一天内发送得验证码次数
2.对于要求2,我们可以设置该验证码得过期时间为2min。

3.实现

1.连接数据库

var rdb *redis.Client
var codeKey string
 var ctx = context.Background()
func initClient()(err error)  {
	rdb = redis.NewClient(&redis.Options{
		Addr: "这里写自己虚拟机得ip地址、或者是本地得ip地址,视个人情况而定:6379",
		Password: "",
		DB: 0,
	})
	ctx,cancel := context.WithTimeout(context.Background(),5*time.Second)
	defer cancel()
	_,err = rdb.Ping(ctx).Result()
	return err
}

注意:博主使用得reids库

"github.com/go-redis/redis/v8"

2.生成验证码
这里采用随机数生成6位验证码

//  createCode 生成6位验证码
func createCode()(code string)  {
	rand.Seed(time.Now().Unix()) //设置随机种子
	code = fmt.Sprintf("%6v",rand.Intn(600000))
	return
}

3.统计当前手机请求验证码次数,将验证码存入redis库中

//  logic 用来处理请求部分
func logic(code,phone string) {
//	1.定义验证码和手机号的key的形式
	codeKey = "key"+code
	phoneKey := "key"+phone
//	2.查看用户发送验证码的数量
	ctn := rdb.Get(ctx,phoneKey).String()
//  ctn为零值的时候,说明该用户还没有发送过验证码
	if ctn == "" {
		rdb.Set(ctx, phoneKey, "1", time.Minute*60*24) //设置手机请求验证码的时间为一天。
	}
	ctn1,_ := strconv.ParseInt(ctn,10,32)
//  发送次数没有超过3次
	if ctn1 <= 2 {
		rdb.Incr(ctx,phoneKey)
	}else{
		fmt.Println("您今天发送的次数已经超过三次,不可再发送请求")
		return
	}
	
//	将验证码存入redis,设置过期时间为2分钟
	rdb.Set(ctx,codeKey,code,time.Minute*2)

4.判断用户输入得验证码是否正确

// isEquals 验证用户输入的验证码是否匹配
func isEquals(input string)bool {
	code := rdb.Get(ctx,codeKey).String()
	if code == input {
		return true
	}
	return false
}

5.主函数

//	1.初始化数据库
	e := initClient()
	if e != nil {
		fmt.Println("连接数据库失败")
		return
	}
//	2.生成验证码
	code := createCode()
//	3.将验证码存入redis,并统计当前用户请求验证码的次数
	phone := "18134567012"
	logic(code,phone)
//	4.判断用户输入的验证码是否正确
	input := "345612"
	res := isEquals(input)
	fmt.Println("res=",res)

6.redis库中内容

这个案例仅仅实现了一个模拟接收和发送得过程。但是练手也是够用了。仅供大家参考。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907583.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号