/// <summary> /// 验证手机号码和短信是否符合验证规则 /// </summary> /// <param name="phoneNumber">需要验证手机号</param> /// <param name="verifyCode">需要验证的验证码</param> /// <param name="failBussiness">验证失败处理</param> /// <param name="successBussiness">验证成功处理</param> /// <param name="errorMessage">错误信息</param> /// <returns></returns> public bool IsSMSVerifyCode(string phoneNumber, string verifyCode, Action <string> failBussiness, Action successBussiness, out string errorMessage) { var ret = false; errorMessage = LoginMessage.MobilePhoneCodeError; // 账户被锁定 var currentTime = DateTime.Now; if (currentTime <= verifyMode.UnableTime) { errorMessage = ComputeRemainUnableMinute(currentTime, verifyMode.UnableTime); return(false); } if (verifyMode.FailNumber == -1) { verifyMode.FailNumber = 1; return(false); } // 禁用用户时间范围内 if (DateTime.Compare(DateTime.Now, verifyMode.UnableTime) < 0) { string clientIP = WebHelper.GetClientIP(); if (clientIP.EqualsOrdinalIgnoreCase(verifyMode.RequestIP) || verifyMode.PhoneNumber.EqualsOrdinalIgnoreCase(phoneNumber)) { // 属于阻止IP return(false); } } else { if (verifyMode.PhoneNumber.EqualsOrdinalIgnoreCase(phoneNumber) && verifyMode.SMSVerifyNumber.EqualsOrdinalIgnoreCase(verifyCode) && DateTime.Compare(DateTime.Now.AddMinutes(-ableMinutes), verifyMode.InitSMSVerifyTime) < 0) { //verifyMode = InitMobileVerifyMode(phoneNumber); _session.Remove(smsVerifySessionKey); successBussiness(); ret = true; } else { // 失败次数大于允许次数 if ((verifyMode.FailNumber += 1) >= FAILCOUNT) { verifyMode.FailNumber = -1; verifyMode.SMSVerifyNumber = Rand.CreatePhoneCode(verifyLen); verifyMode.UnableTime = DateTime.Now.AddMinutes(UnableMinutes); _session.Set(smsVerifySessionKey, verifyMode, UnableMinutes); failBussiness(phoneNumber); errorMessage = ComputeRemainUnableMinute(DateTime.Now, verifyMode.UnableTime); } } } if (ret) { errorMessage = string.Empty; } return(ret); }
private MobileVerifyMode InitMobileVerifyMode(string phoneNumber = "") { var now = DateTime.Now; var mobileVerifyMode = new MobileVerifyMode { PhoneNumber = phoneNumber, SMSVerifyNumber = Rand.CreatePhoneCode(verifyLen), InitSMSVerifyTime = now, LastSendTime = now.AddMinutes(-RANGE), FailNumber = -1, RequestIP = WebHelper.GetClientIP() }; _session.Set(smsVerifySessionKey, mobileVerifyMode, ableMinutes); return(mobileVerifyMode); }