/// <summary> /// 获取随机字符串 /// </summary> /// <param name="length">字符串长度</param> /// <param name="randCodeType">字符类型</param> /// <returns>返回生成的字符串</returns> /// <example> /// <code lang="c#"> /// <![CDATA[ /// /// string str=StringHelper.GetRandCode(4,RandCodeType.NUMBER|RandCodeType.LETTER);//随机生成4位数字和字母混合字符串 /// /// string num=StringHelper.GetRandCode(6,RandCodeType.NUMBER);//随机生成6位数字 /// /// string str2=StringHelper.GetRandCode(4,RandCodeType.LETTER);//随机生成4位字母字符串 /// /// ]]> /// </code> /// </example> public static string GetRandCode(int length, RandCodeType randCodeType) { StringBuilder strb = new StringBuilder(); long tick = DateTime.Now.Ticks; Random rnd = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32)); int randcodeType = (int)randCodeType; for (int i = 0; i < length; i++) { switch (randcodeType) { case 1: strb.Append(numArray[rnd.Next(0, numArray.Length)]); break; case 2: strb.Append(letterArray[rnd.Next(0, letterArray.Length)]); break; case 3: strb.Append(numberAndLetterArray[rnd.Next(0, numberAndLetterArray.Length)]); break; } } return(strb.ToString()); }
/// <summary> /// 校验验证码 /// </summary> /// <param name="type"></param> /// <param name="code"></param> /// <param name="token"></param> /// <param name="tryIndicator"></param> /// <returns></returns> public async Task <string> VerifyRandCodeAsync(RandCodeType type, string code, string token, Action <int> tryIndicator = null) { if (type == RandCodeType.SjRand) { var url = "/passport/captcha/captcha-check"; var referUrl = ""; object data = new { answer = code, rand = "sjrand", login_site = "E" }; //var sendDelay var result = await RunRequestLoopAsync( _ => { var ctx = Create( HttpMethod.Post, url, referUrl, data, new { result_code = 0, result_message = "" } ); if (ApiConfiguration.Instance.EnableVerifycodeSubmitDelay && NetworkConfiguration.Current.VcSubmitDelay > 0) { var delay = NetworkConfiguration.Current.VcSubmitDelay - (int)(DateTime.Now - LastVcLoadTime).TotalMilliseconds; if (delay > 0) { ctx.SendDelay(new TimeSpan(0, 0, 0, 0, delay)); } } return(ctx); }, tryIndicator ).ConfigureAwait(true); if (!result.IsValid()) { return("登录失败,请重试(无法校验验证码)"); } Session.LastCheckRandCodeTime = DateTime.Now; if (result.Result.result_code != 4) { return(result.Result.result_message ?? "验证码错误"); } } else { var url = "passcodeNew/checkRandCodeAnsyn"; var referUrl = ""; object data = null; switch (type) { case RandCodeType.Randp: referUrl = "confirmPassenger/initDc"; data = new { randCode = code, rand = "randp", REPEAT_SUBMIT_TOKEN = token, _json_att = Session.Attributes }; break; case RandCodeType.RandpResign: referUrl = "confirmPassenger/initGc"; data = new { randCode = code, rand = "randp", REPEAT_SUBMIT_TOKEN = token, _json_att = Session.Attributes }; break; default: break; } //var sendDelay var result = await RunRequestLoopAsync( _ => { var ctx = Create( HttpMethod.Post, url, referUrl, data, new { data = new { result = 0 } } ); if (ApiConfiguration.Instance.EnableVerifycodeSubmitDelay && NetworkConfiguration.Current.VcSubmitDelay > 0) { var delay = NetworkConfiguration.Current.VcSubmitDelay - (int)(DateTime.Now - LastVcLoadTime).TotalMilliseconds; if (delay > 0) { ctx.SendDelay(new TimeSpan(0, 0, 0, 0, delay)); } } return(ctx); }, tryIndicator ).ConfigureAwait(true); if (!result.IsValid()) { return("登录失败,请重试(无法校验验证码)"); } Session.LastCheckRandCodeTime = DateTime.Now; if ((result.Result.data?.result ?? 0) == 0) { return("验证码错误"); } } return(null); }
/// <summary> /// 校验验证码 /// </summary> /// <param name="type"></param> /// <param name="code"></param> /// <param name="token"></param> /// <param name="tryIndicator"></param> /// <returns></returns> public string VerifyRandCode(RandCodeType type, string code, string token, Action <int> tryIndicator = null) { return(VerifyRandCodeAsync(type, code, token, tryIndicator).Result); }