在B站看redis教程,老师做了一个java+redis模拟验证码验证得功能。于是,我把它转换成了go来实现。
1.要求1.每个手机每天只能发送3次验证码
2.每次接收得验证码2分钟内有效。
1.对于要求1,我们可以每个手机号一天内发送得验证码次数
2.对于要求2,我们可以设置该验证码得过期时间为2min。
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库中内容
这个案例仅仅实现了一个模拟接收和发送得过程。但是练手也是够用了。仅供大家参考。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)