/// <summary>
		/// 校验验证码
		/// </summary>
		/// <param name="type">验证码类型</param>
		/// <param name="points">验证码点位置</param>
		/// <returns></returns>

		public async Task<bool> CheckVerifyCode(VerifyCodeType type, params Point[] points)
		{
			var randType = "sjrand";

			//为了准确起见,我们使用真正的引用页
			var urlRefer = "https://kyfw.12306.cn/otn/login/init";

			if (type == VerifyCodeType.SubmitOrder)
			{
				randType = "randp";
				urlRefer = "https://kyfw.12306.cn/otn/confirmPassenger/initDc";
			}

			var ctx = Session.NetClient.Create<WebResponseResult<VerifyCodeCheckResult>>(
																							HttpMethod.Post,
																						"https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn",
																						urlRefer,
																						new
																						{
																							randCode = points.Select(s => s.X + "," + s.Y).JoinAsString(","),
																							rand = randType
																						}
				);

			await ctx.SendTask();

			return ctx.IsValid() && ctx.Result.Data.Result == 1;
		}
Example #2
0
        /// <summary>
        /// 发送验证码
        /// 根据不同的包类型使用不同的短信签名
        /// </summary>
        /// <param name="verifyCodeType"></param>
        /// <param name="mobile"></param>
        /// <param name="packType"></param>
        /// <returns></returns>
        public static ResultInfo SendVerifyCode(VerifyCodeType verifyCodeType, string mobile, int packType, string ip)
        {
            if (string.IsNullOrEmpty(BaseUrl))
            {
                throw new ApplicationException("fundationApiDomain配置不能为空");
            }
            if (string.IsNullOrWhiteSpace(mobile))
            {
                return(new ResultInfo(-1, "手机号不能为空"));
            }

            var js = new JsonString();

            js.Set("verifyCodeType", (int)verifyCodeType);
            js.Set("mobile", mobile);
            js.Set("packType", packType);
            js.Set("ip", ip);

            var url  = string.Format("http://{0}/fundationapi/sendsms/sendverifycode", BaseUrl);
            var resp = HttpWebResponseUtility.HttpPost(url, js.ToString());

            var jsonString = new JsonString(resp);

            var result = new ResultInfo <string>();

            result.Error_no   = jsonString.GetInt("error_no");
            result.Error_info = jsonString.Get("error_info").SafeToString();
            result.Data       = jsonString.Get("data").SafeToString();

            return(result);
        }
Example #3
0
        /// <summary>
        /// 产生验证码(随机产生4-6位)
        /// </summary>
        /// <param name="type">验证码类型:数字,字符,符合</param>
        /// <param name="length">默认0为随机4~6位,指定位数则生产对应位数</param>
        /// <returns></returns>
        public string CreateVerifyCode(VerifyCodeType type, int length = 0)
        {
            string verifyCode = string.Empty;
            Random random     = new Random();

            if (length == 0)
            {
                length = random.Next(4, 6);
            }
            switch (type)
            {
            case VerifyCodeType.NumberVerifyCode:
                verifyCode = GetSingleObj().CreateNumberVerifyCode(length);
                break;

            case VerifyCodeType.AbcVerifyCode:
                verifyCode = GetSingleObj().CreateAbcVerifyCode(length);
                break;

            case VerifyCodeType.MixVerifyCode:
                verifyCode = GetSingleObj().CreateMixVerifyCode(length);
                break;
            }
            return(verifyCode);
        }
        /// <summary>
        /// 校验验证码
        /// </summary>
        /// <param name="type">验证码类型</param>
        /// <param name="points">验证码点位置</param>
        /// <returns></returns>

        public async Task <bool> CheckVerifyCode(VerifyCodeType type, params Point[] points)
        {
            var randType = "sjrand";

            //为了准确起见,我们使用真正的引用页
            var urlRefer = "https://kyfw.12306.cn/otn/login/init";

            if (type == VerifyCodeType.SubmitOrder)
            {
                randType = "randp";
                urlRefer = "https://kyfw.12306.cn/otn/confirmPassenger/initDc";
            }

            var ctx = Session.NetClient.Create <WebResponseResult <VerifyCodeCheckResult> >(
                HttpMethod.Post,
                "https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn",
                urlRefer,
                new
            {
                randCode = points.Select(s => s.X + "," + s.Y).JoinAsString(","),
                rand     = randType
            }
                );

            await ctx.SendTask();

            return(ctx.IsValid() && ctx.Result.Data.Result == 1);
        }
Example #5
0
        /// <summary>
        /// 产生验证码(随机产生4-6位)
        /// </summary>
        /// <param name="type">验证码类型:数字,字符,符合</param>
        /// <returns></returns>
        public async Task <string> CreateVerifyCodeAsync(VerifyCodeType type)
        {
            string verifyCode = string.Empty;
            Random random     = new Random();
            int    length     = random.Next(4, 6);

            switch (type)
            {
            case VerifyCodeType.NumberVerifyCode:
                verifyCode = await Task.Run(() => GetSingleObj().CreateNumberVerifyCode(length));

                break;

            case VerifyCodeType.AbcVerifyCode:
                verifyCode = await Task.Run(() => GetSingleObj().CreateAbcVerifyCode(length));

                break;

            case VerifyCodeType.MixVerifyCode:
                verifyCode = await Task.Run(() => GetSingleObj().CreateMixVerifyCode(length));

                break;
            }
            return(verifyCode);
        }
Example #6
0
        /// <summary>
        /// 加载验证码
        /// </summary>
        /// <param name="type">验证码类型</param>
        /// <returns></returns>
        public async Task <Image> LoadVerifyCodeImage(VerifyCodeType type = VerifyCodeType.Login)
        {
            var ctx = Session.NetClient.Create <Image>(HttpMethod.Get, ApiList.VerifyCodeImage);
            await ctx.SendAsync();

            return(ctx.Result);
        }
Example #7
0
        /// <summary>
        /// 产生验证码(随机产生4-6位)
        /// </summary>
        /// <param name="type">验证码类型:数字,字符,符合</param>
        /// <returns></returns>
        public string CreateVerifyCode(VerifyCodeType type)
        {
            string verifyCode = string.Empty;
            Random random     = new Random();
            int    length     = random.Next(4, 6);

            switch (type)
            {
            case VerifyCodeType.NumberVerifyCode:
                verifyCode = GetSingleObj().CreateNumberVerifyCode(length);
                break;

            case VerifyCodeType.AbcVerifyCode:
                verifyCode = GetSingleObj().CreateAbcVerifyCode(length);
                break;

            case VerifyCodeType.MixVerifyCode:
                verifyCode = GetSingleObj().CreateMixVerifyCode(length);
                break;
            }

            //2019-03-02 增加存入缓存
            //var ic = new MemoryCache();
            //ic.Set<string>("code_" + verifyCode, verifyCode, 120);//2分钟自动过期
            //2019-03-04 增加Redis缓存
            Utils.MemoryCahce.Set <string>("code_" + verifyCode, verifyCode, 120);

            return(verifyCode);
        }
        /// <summary>
        /// 获取验证码
        /// </summary>
        /// <param name="vCodeModel">验证码类型</param>
        public void GetSmsVerifyCode(string appSign, VerifyCodeViewModel vCodeModel)
        {
            try
            {
                if (vCodeModel == null)
                {
                    throw new MessageException("获取验证码参数不可为空!");
                }
                if (vCodeModel.TerminalSign == null)
                {
                    throw new MessageException("终端标识不可为空!");
                }
                VerifyCodeType verifyCodeType = (VerifyCodeType)Extensions.ToInt(vCodeModel.CodeType, 1);
                SmsFuncType    funcType       = verifyCodeType == VerifyCodeType.BindMobile ? SmsFuncType.BindMobile : SmsFuncType.Login;
                var            verifyCode     = service.GetVerifyCode(appSign, vCodeModel.Mobile, vCodeModel.TerminalSign, verifyCodeType);

                // 3.调用发送邮件接口,发送验证码
                string  title              = string.Empty;
                string  content            = string.Empty;
                SmsType smsType            = SmsType.UnKnown;
                decimal validateCodeExpire = ConfigUtil.ValidatecodeExpire / 60;
                switch (verifyCodeType)
                {
                case VerifyCodeType.Login:
                case VerifyCodeType.BindMobile:
                {
                    smsType = SmsType.ValidateCode;
                    content = string.Format(MsgTemplateUtil.MsgDict["SmsValidCode"], verifyCode, validateCodeExpire);
                    break;
                }

                default:
                {
                    throw new MessageException("未知的验证码类型!");
                }
                }

                if (!string.IsNullOrWhiteSpace(content))
                {
                    //发送短信
                    if (verifyCodeType == VerifyCodeType.Login || verifyCodeType == VerifyCodeType.BindMobile)
                    {
                        var parms = new Dictionary <string, object>();
                        parms.Add("code", verifyCode);
                        parms.Add("code_expire", validateCodeExpire);
                        SingleInstance <SmsBLL> .Instance.SendSmsMsg(appSign, vCodeModel.Mobile, parms, content, smsType, funcType);
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error(ex.StackTrace);
                throw new MessageException(ex.Message);
            }
        }
        /// <summary>
        /// 验证码图片 => byte[]
        /// </summary>
        /// <param name="verifyCode">验证码</param>
        /// <param name="width">宽</param>
        /// <param name="height">高</param>
        /// <returns>byte[]</returns>
        byte[] IVerifyCode.CreateImageVerifyCodeToByte(VerifyCodeType verifyCodeType, int width, int height, int length)
        {
            //保存图片数据
            using (MemoryStream stream = new MemoryStream())
                using (Bitmap bitmap = this.CreateVerifyCode(verifyCodeType, width, height, length))
                {
                    bitmap.Save(stream, ImageFormat.Jpeg);

                    //输出图片流
                    return(stream.ToArray());
                }
        }
        /// <summary>
        /// 保存验证码
        /// </summary>
        public static bool Insert(VerifyCodeType verifyCodeType, string mobile, string verifyCode, int packType, int status, string comment)
        {
            if (string.IsNullOrWhiteSpace(mobile) || string.IsNullOrWhiteSpace(verifyCode))
            {
                return(false);
            }
            var sql = "INSERT INTO [dbo].[VerifyCodeInfo]([Mobile],[VerifyCode],[VerifyCodeType],[Status],[Comment],[PackType]) VALUES(@Mobile,@VerifyCode,@VerifyCodeType,@Status,@Comment,@PackType);";

            using (var conn = new SqlConnection(ConnectionString.DB_IQFUser))
            {
                var count = conn.Execute(sql, new { verifyCodeType = verifyCodeType, mobile = Cryptogram.EncryptPassword(mobile), verifyCode = verifyCode, packType = packType, status = status, comment });
                return(count > 0);
            }
        }
Example #11
0
        /// <summary>
        /// 选择一个类型使用
        /// </summary>
        private void ChoiceType()
        {
            int Count = HasType.Count;

            if (Count > 0)
            {
                Random rd = new Random();
                UseType = HasType[rd.Next(0, Count)];
            }
            else
            {
                throw new VerifyCodeException("请先配置想使用的类型");
            }
        }
Example #12
0
        /// <summary>
        ///     产生验证码(指定长度)
        /// </summary>
        /// <param name="type">验证码类型:数字,字符,符合</param>
        /// <param name="length">长度</param>
        /// <returns></returns>
        public string CreateVerifyCode(VerifyCodeType type, int length)
        {
            var verifyCode = string.Empty;

            // var random = new Random();
            verifyCode = type switch
            {
                VerifyCodeType.NumberVerifyCode => CreateNumberVerifyCode(length),
                VerifyCodeType.AbcVerifyCode => CreateAbcVerifyCode(length),
                VerifyCodeType.MixVerifyCode => CreateMixVerifyCode(length),
                _ => verifyCode
            };

            return(verifyCode);
        }
        /// <summary>
        /// 获取有效验证码(最近五分钟)
        /// </summary>
        /// <param name="mobile">手机号</param>
        /// <returns></returns>
        public static VerifyCodeInfoEntity GetValid(string mobile, VerifyCodeType codeType)
        {
            if (string.IsNullOrWhiteSpace(mobile))
            {
                return(null);
            }
            var sql = "select top 1 * from dbo.VerifyCodeInfo t where t.mobile = @mobile and t.VerifyCodeType = @codeType and t.[status] = 1 and t.AddTime between @startTime and @endTime order by t.AddTime DESC;";

            using (var conn = new SqlConnection(ConnectionString.DB_IQFUser))
            {
                var enMobile  = Cryptogram.EncryptPassword(mobile);
                var startTime = DateTime.Now.AddSeconds(-300);
                var entity    = conn.Query <VerifyCodeInfoEntity>(sql, new { mobile = enMobile, codeType = codeType, startTime = startTime, endTime = DateTime.Now }).FirstOrDefault();
                return(entity);
            }
        }
        /// <summary>
        /// 校验获取验证码请求参数
        /// </summary>
        /// <param name="verifyCodeType">验证码类型</param>
        /// <param name="email">邮箱地址</param>
        /// <param name="mobile">手机号码</param>
        private void CheckGetUserVerifyCode(string appSign, VerifyCodeType verifyCodeType, string terminalSign, string mobile)
        {
            // 1.校验验证码类型
            int codeType = verifyCodeType.GetHashCode();

            // 2.校验获取验证码方式
            if (string.IsNullOrWhiteSpace(mobile))
            {
                throw new MessageException("手机号码不能为空!");
            }

            //验证是否频繁发送
            terminalSign = mobile;
            bool isExist = this.IsExistVerifycodeBlackList(appSign, terminalSign, ConfigUtil.VarifyCodeFailCount);

            if (isExist)
            {
                throw new MessageException("您操作太频繁了,请稍候再试!");
            }
        }
Example #15
0
 public string CreatePhoneCode(int length, string phone, VerifyCodeType CodeType = VerifyCodeType.Digital)
 {
     try
     {
         string text = this.GeneralCode(length, CodeType);
         HiCache.Insert($"DataCache-PhoneCode-{phone}", HiCryptographer.Encrypt(text), 1200);
         HttpCookie httpCookie = new HttpCookie(phone + "_PhoneVerifyCookie");
         httpCookie.HttpOnly = true;
         httpCookie.Value    = HiCryptographer.Encrypt(text);
         httpCookie.Expires  = DateTime.Now.AddMinutes(20.0);
         HttpContext.Current.Response.Cookies.Add(httpCookie);
         HiCache.Remove("smsnum" + phone);
         return(text);
     }
     catch (Exception ex)
     {
         Globals.WriteExceptionLog(ex, null, "CreateVerifyCode");
         return(string.Empty);
     }
 }
Example #16
0
        /// <summary>
        /// 产生验证码,默认长度4位
        /// </summary>
        /// <param name="length"></param>
        /// <param name="type">验证码类型:数字,字符,符合。默认数字</param>
        /// <returns></returns>
        public static string CreateVerifyCode(int length = 4, VerifyCodeType type = VerifyCodeType.MixVerifyCode)
        {
            string verifyCode = string.Empty;
            Random random     = new Random();

            switch (type)
            {
            case VerifyCodeType.NumberVerifyCode:
                verifyCode = CreateNumberVerifyCode(length);
                break;

            case VerifyCodeType.AbcVerifyCode:
                verifyCode = CreateAbcVerifyCode(length);
                break;

            case VerifyCodeType.MixVerifyCode:
                verifyCode = CreateMixVerifyCode(length);
                break;
            }
            return(verifyCode);
        }
Example #17
0
 public string CreateVerifyCode(int length, VerifyCodeType CodeType = VerifyCodeType.Digital, string openId = "")
 {
     try
     {
         string text = this.GeneralCode(length, CodeType).Trim();
         if (!string.IsNullOrEmpty(openId))
         {
             HiCache.Insert(openId, HiCryptographer.Encrypt(text), 1200);
         }
         HttpCookie httpCookie = new HttpCookie("VerifyCookie");
         httpCookie.HttpOnly = true;
         httpCookie.Value    = HiCryptographer.Encrypt(text);
         httpCookie.Expires  = DateTime.Now.AddMinutes(20.0);
         HttpContext.Current.Response.Cookies.Add(httpCookie);
         return(text);
     }
     catch (Exception ex)
     {
         Globals.WriteExceptionLog(ex, null, "CreateVerifyCode");
         return(string.Empty);
     }
 }
        /// <summary>
        /// 加载验证码
        /// </summary>
        /// <param name="type">验证码类型</param>
        /// <returns></returns>
        public async Task <Image> LoadVerifyCodeImage(VerifyCodeType type)
        {
            var module   = "login";
            var randType = "sjrand";

            //为了准确起见,我们使用真正的引用页
            var urlRefer = "https://kyfw.12306.cn/otn/login/init";

            if (type == VerifyCodeType.SubmitOrder)
            {
                module   = "passenger";
                randType = "randp";
                urlRefer = "https://kyfw.12306.cn/otn/confirmPassenger/initDc";
            }


            var ctx = Session.NetClient.Create <Image>(HttpMethod.Get,
                                                       string.Format("https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module={0}&rand={1}&{2}", module, randType, new Random().NextDouble().ToString()),
                                                       urlRefer
                                                       );
            await ctx.SendTask();

            return(ctx.Result);
        }
Example #19
0
        /// <summary>
        /// 获取验证码
        /// </summary>
        /// <param name="mobile">手机号</param>
        /// <param name="verifyCodeType">验证码类型</param>
        /// <returns></returns>
        public static ResultInfo <string> GetVerifyCode(string mobile, VerifyCodeType verifyCodeType)
        {
            if (string.IsNullOrEmpty(BaseUrl))
            {
                throw new ApplicationException("fundationApiDomain配置不能为空");
            }
            if (string.IsNullOrWhiteSpace(mobile))
            {
                return(new ResultInfo <string>(-1, "手机号不能为空"));
            }

            var url  = string.Format("http://{0}/fundationapi/sendsms/GetVerifyCode?mobile={1}&verifyCodeType={2}", BaseUrl, mobile, (int)verifyCodeType);
            var resp = HttpWebResponseUtility.HttpGet(url);

            var jsonString = new JsonString(resp);

            var result = new ResultInfo <string>();

            result.Error_no   = jsonString.GetInt("error_no");
            result.Error_info = jsonString.Get("error_info").SafeToString();
            result.Data       = jsonString.Get("data").SafeToString();

            return(result);
        }
        /// <summary>
        /// 校验获取验证码请求参数
        /// </summary>
        /// <param name="verifyCodeType">验证码类型</param>
        /// <param name="email">邮箱地址</param>
        /// <param name="mobile">手机号码</param>
        private void CheckGetUserVerifyCode(string appSign, VerifyCodeType verifyCodeType, string terminalSign, string email, string mobile = "")
        {
            // 1.校验验证码类型
            int codeType = (int)verifyCodeType;

            if (codeType <= 0)
            {
                throw new MessageException("验证码类型格式不正确!");
            }

            // 2.校验获取验证码方式
            if (string.IsNullOrWhiteSpace(email) && string.IsNullOrWhiteSpace(mobile))
            {
                throw new MessageException("手机号码和邮箱地址不可同时为空!");
            }

            //验证是否频繁发送
            bool isExist = this.IsExistVerifycodeBlackList(appSign, terminalSign, ConfigUtil.VarifyCodeFailCount);

            if (isExist)
            {
                throw new MessageException("您操作太频繁了,请稍候再试!");
            }
        }
		/// <summary>
		/// 加载验证码
		/// </summary>
		/// <param name="type">验证码类型</param>
		/// <returns></returns>
		public async Task<Image> LoadVerifyCodeImage(VerifyCodeType type)
		{
			var module = "login";
			var randType = "sjrand";

			//为了准确起见,我们使用真正的引用页
			var urlRefer = "https://kyfw.12306.cn/otn/login/init";

			if (type == VerifyCodeType.SubmitOrder)
			{
				module = "passenger";
				randType = "randp";
				urlRefer = "https://kyfw.12306.cn/otn/confirmPassenger/initDc";
			}


			var ctx = Session.NetClient.Create<Image>(HttpMethod.Get,
													string.Format("https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module={0}&rand={1}&{2}", module, randType, new Random().NextDouble().ToString()),
													urlRefer
				);
			await ctx.SendTask();

			return ctx.Result;
		}
Example #22
0
        /// <summary>
        /// 产生验证码(随机产生4-6位)
        /// </summary>
        /// <param name="type">验证码类型:数字,字符,符合</param>
        /// <returns></returns>
        public static string CreateVerifyCode(VerifyCodeType type, int length = 4)
        {
            string verifyCode = string.Empty;

            switch (type)
            {
            case VerifyCodeType.NumberVerifyCode:
                verifyCode = CreateNumberVerifyCode(length);
                break;

            case VerifyCodeType.AbcVerifyCode:
                verifyCode = CreateAbcVerifyCode(length);
                break;

            case VerifyCodeType.MixVerifyCode:
                verifyCode = CreateMixVerifyCode(length);
                break;

            case VerifyCodeType.ChineseVerifyCode:
                verifyCode = CreateChineseVerifyCode(length);
                break;
            }
            return(verifyCode);
        }
        /// <summary>
        /// 获取验证码
        /// </summary>
        /// <param name="email">邮箱地址</param>
        /// <param name="mobile">手机号码</param>
        /// <returns>已有的验证码</returns>
        public void GetVerifyCode(string appSign, VerifyCodeType verifyCodeType, SmsFuncType tempType, string terminalSign, string email, string mobile)
        {
            // 1.校验请求参数
            CheckGetUserVerifyCode(appSign, verifyCodeType, terminalSign, email, mobile);

            // 2.获取新验证码
            string verifyCode = SingleInstance <VerifyCodeService> .Instance.BuildVerifyCode(appSign, terminalSign, email, mobile);

            // 3.调用发送邮件接口,发送验证码
            string    title              = string.Empty;
            string    content            = string.Empty;
            EmailType emlType            = EmailType.UnKnown;
            SMSType   smsType            = SMSType.UnKnown;
            decimal   validateCodeExpire = ConfigUtil.ValidatecodeExpire / 60;

            switch (verifyCodeType)
            {
            case VerifyCodeType.BindEmail:
            {
                emlType = EmailType.Bind;
                title   = "yingmei.me邮箱验证";
                content = string.Format(TemplateConfigUtil.EmlDic["BindEmail"], verifyCode, validateCodeExpire);
                break;
            }

            case VerifyCodeType.BindMobile:
            {
                smsType = SMSType.Bind;
                content = string.Format(TemplateConfigUtil.EmlDic["SmsValidCode"], verifyCode, validateCodeExpire);
                break;
            }

            case VerifyCodeType.ModifyPwdByMobile:
            {
                smsType = SMSType.Bind;
                content = string.Format(TemplateConfigUtil.EmlDic["SmsValidCode"], verifyCode, validateCodeExpire);
                break;
            }

            case VerifyCodeType.GetPwdByMobile:
            {
                smsType = SMSType.Bind;
                content = string.Format(TemplateConfigUtil.EmlDic["SmsValidCode"], verifyCode, validateCodeExpire);
                break;
            }

            case VerifyCodeType.UpdateBindMobile:
            {
                smsType = SMSType.Bind;
                content = string.Format(TemplateConfigUtil.EmlDic["SmsValidCode"], verifyCode, validateCodeExpire);
                break;
            }

            default:
            {
                throw new MessageException("未知的验证码类型!");
            }
            }

            if (!string.IsNullOrWhiteSpace(content))
            {
                int codeType = (int)verifyCodeType;
                if (codeType == (int)VerifyCodeType.BindEmail)
                {
                    //发送邮件(暂时没有邮件发送)
                    //SingleInstance<EmailService>.Instance.SubmitEmail(email, title, content.ToString(), emlType);
                }

                //发送短信
                if (verifyCodeType == VerifyCodeType.BindMobile ||
                    verifyCodeType == VerifyCodeType.ModifyPwdByMobile ||
                    verifyCodeType == VerifyCodeType.GetPwdByMobile ||
                    verifyCodeType == VerifyCodeType.UpdateBindMobile
                    )
                {
                    Dictionary <string, object> parms = new Dictionary <string, object>();
                    parms.Add("code", verifyCode);
                    parms.Add("code_expire", validateCodeExpire);
                    SingleInstance <SysService> .Instance.SendSmsMessage(appSign, mobile, parms, content, smsType, tempType);
                }
            }
        }
        /// <summary>
        /// 产生验证
        /// </summary>
        /// <param name="type">验证码类型:数字,字符,符合</param>
        /// <returns></returns>
        private Bitmap CreateVerifyCode(VerifyCodeType verifyCodeType, int width, int height, int length)
        {
            string verifyCode = string.Empty;

            switch (verifyCodeType)
            {
            case VerifyCodeType.Number: verifyCode = this.CreateNumberVerifyCode(length); break;

            case VerifyCodeType.Letter: verifyCode = this.CreateLetterVerifyCode(length); break;

            case VerifyCodeType.Hybrid: verifyCode = this.CreateHybridVerifyCode(length); break;
            }

            Bitmap bitmap = new Bitmap(width, height);

            using (Graphics graphics = Graphics.FromImage(bitmap))
            {
                Font font = new Font("Arial", 14, (FontStyle.Bold | FontStyle.Italic));

                SizeF totalSizeF = graphics.MeasureString(verifyCode, font);

                PointF startPointF = new PointF(0, (height - totalSizeF.Height) / 2);

                Random random = new Random(); //随机数产生器

                graphics.Clear(Color.White);  //清空图片背景色

                for (int i = 0; i < verifyCode.Length; i++)
                {
                    Brush brush = new LinearGradientBrush(new Point(0, 0), new Point(1, 1), Color.FromArgb(random.Next(255), random.Next(255), random.Next(255)), Color.FromArgb(random.Next(255), random.Next(255), random.Next(255)));

                    graphics.DrawString(verifyCode[i].ToString(), font, brush, startPointF);

                    SizeF curCharSizeF = graphics.MeasureString(verifyCode[i].ToString(), font);

                    startPointF.X += curCharSizeF.Width;

                    brush.Dispose();
                }

                font.Dispose();

                //画图片的干扰线
                for (int i = 0; i < 10; i++)
                {
                    int x1 = random.Next(bitmap.Width);

                    int x2 = random.Next(bitmap.Width);

                    int y1 = random.Next(bitmap.Height);

                    int y2 = random.Next(bitmap.Height);

                    graphics.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
                }

                //画图片的前景干扰点
                for (int i = 0; i < 100; i++)
                {
                    int x = random.Next(bitmap.Width);

                    int y = random.Next(bitmap.Height);

                    bitmap.SetPixel(x, y, Color.FromArgb(random.Next()));
                }

                graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, bitmap.Width - 1, bitmap.Height - 1); //画图片的边框线

                return(bitmap);
            }
        }
 /// <summary>
 /// 验证码图片 => Bitmap
 /// </summary>
 /// <param name="verifyCode">验证码类型</param>
 /// <param name="width">宽</param>
 /// <param name="height">高</param>
 /// <returns>Bitmap</returns>
 Bitmap IVerifyCode.CreateImageVerifyCodeToBitmap(VerifyCodeType verifyCodeType, int width, int height, int length)
 {
     return(this.CreateVerifyCode(verifyCodeType, width, height, length));
 }
        /// <summary>
        /// 获取验证码
        /// </summary>
        /// <param name="mobile">手机号码</param>
        /// <returns>已有的验证码</returns>
        public string GetVerifyCode(string appSign, string mobile, string terminalSign, VerifyCodeType verifyCodeType)
        {
            // 1.校验请求参数
            CheckGetUserVerifyCode(appSign, verifyCodeType, terminalSign, mobile);

            // 2.获取新验证码
            return(BuildVerifyCode(appSign, terminalSign, mobile));
        }
Example #27
0
        public string GeneralCode(int length, VerifyCodeType CodeType = VerifyCodeType.Digital)
        {
            string text    = string.Empty;
            Random random  = new Random();
            Random random2 = new Random();

            while (text.Length < length)
            {
                int  num = random2.Next();
                char c;
                switch (CodeType)
                {
                case VerifyCodeType.Digital:
                    c = (char)(48 + (ushort)(num % 10));
                    goto IL_01d6;

                case VerifyCodeType.DigitalANDLetter:
                {
                    int num2 = random.Next(1, 62);
                    c = ((num2 > 10) ? ((num2 >= 36) ? ((char)(65 + (ushort)(num % 26))) : ((char)(97 + (ushort)(num % 26)))) : ((char)(48 + (ushort)(num % 10))));
                    if (c != '0' && c != 'o' && c != '1' && c != '7' && c != 'l' && c != '9' && c != 'g' && c != 'I')
                    {
                        goto IL_01d6;
                    }
                    break;
                }

                case VerifyCodeType.DigitalANDLowerLetter:
                {
                    int num2 = random.Next(1, 36);
                    c = ((num2 > 10) ? ((char)(97 + (ushort)(num % 26))) : ((char)(48 + (ushort)(num % 10))));
                    if (c != '0' && c != 'o' && c != '1' && c != 'l' && c != '9' && c != 'g')
                    {
                        goto IL_01d6;
                    }
                    break;
                }

                case VerifyCodeType.DigitalANDUpperLetter:
                {
                    int num2 = random.Next(1, 36);
                    c = ((num2 > 10) ? ((char)(65 + (ushort)(num % 26))) : ((char)(48 + (ushort)(num % 10))));
                    goto IL_01d6;
                }

                case VerifyCodeType.Letter:
                {
                    int num2 = random.Next(1, 52);
                    c = ((num2 > 26) ? ((char)(65 + (ushort)(num % 26))) : ((char)(97 + (ushort)(num % 26))));
                    goto IL_01d6;
                }

                case VerifyCodeType.LowerLetter:
                    c = (char)(97 + (ushort)(num % 26));
                    goto IL_01d6;

                case VerifyCodeType.UpperLetter:
                    c = (char)(65 + (ushort)(num % 26));
                    goto IL_01d6;

                default:
                {
                    c = (char)(48 + (ushort)(num % 10));
                    goto IL_01d6;
                }
IL_01d6:
                    text += c.ToString();
                    break;
                }
            }
            return(text);
        }
		public RequireVcDlg(ServiceContext context, VerifyCodeType randType) : base(context)
		{
			RandType = randType;

			InitializeComponent();
		}
Example #29
0
        public RequireVcDlg(ServiceContext context, VerifyCodeType randType) : base(context)
        {
            RandType = randType;

            InitializeComponent();
        }