假定短信验证码约定为 6 位数字。
##一般思路
生成阶段:用户点获取验证码,程序会生成 6 位的 rand(0, 9)数字,存储在 redis key_phone 设置 2 分钟过期,并发送到用户 phone
校验阶段:用户发送请求 phone+code , 直接找 redis key_phone 强校验 value. 通过则校验通过
##新的思路
生成阶段:用户点获取验证码,程序根据用户 phone 和时间戳 T,md5 一下,截取中间 6 位根据 map 字典生成 6 位数字,并发送到用户 phone 校验阶段:用户发送请求 phone+code+T,(注意:T 是上次请求的时间错,time 是本次请求的时间戳),程序根据用户 phone 和 T,md5 一下,截取中间 6 位根据 map 字典生成 6 位数字 code_new,code == code_new && (time - T) < 2min ? 校验通过: 校验失败。