Exemplo n.º 1
0
        /// <summary>
        /// 获取指定长度的验证码图片
        /// </summary>
        /// <param name="length">验证码长度</param>
        /// <param name="codeType">验证码类型</param>
        /// <returns>item1为验证码内容,item2为验证码字节数组</returns>
        public Tuple <string, byte[]> CreateImage(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            length.GreaterThan(0, "验证码长度必须大于0");
            string code;

            switch (codeType)
            {
            case ValidateCodeType.Number:
                code = GetRandomNums(length);
                break;

            case ValidateCodeType.ChineseCharacter:
                code = GetRandomHanzis(length);
                break;

            default:
                code = GetRandomNumsAndLetters(length);
                break;
            }
            if (code.Length > length)
            {
                code = code.Substring(0, length);
            }
            var codeImage = CreateImage(code, codeType);

            byte[] imageBytes = null;
            using (MemoryStream stream = new MemoryStream())
            {
                codeImage.Save(stream, ImageFormat.Png);
                imageBytes = stream.ToArray();
            }
            return(Tuple.Create(code, imageBytes));
        }
Exemplo n.º 2
0
        public void ValidateCode(string actionType, string id, ValidateCodeTemplate template)
        {
            if (ValidateCodeManager.HasValidateCode(actionType) == false)
            {
                return;
            }


            string tip;

            ValidateCodeType validateCodeType = ValidateCodeManager.GetValidateCodeTypeByAction(actionType);

            if (validateCodeType == null)
            {
                return;
            }

            tip = validateCodeType.Tip;

            if (id == null)
            {
                id = string.Empty;
            }
            bool   disableIme = validateCodeType.DisableIme;
            string inputName  = string.Format(Consts.ValidateCode_InputName, actionType, id);
            string imageUrl   = ValidateCodeManager.GetValidateCodeImageUrl(actionType, false, id);

            template(inputName, tip, imageUrl, disableIme);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 获取指定长度的验证码图片
        /// </summary>
        public Bitmap CreateImage(int length, out string code, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            length.CheckGreaterThan("length", 0);

            length = length < 1 ? 1 : length;
            switch (codeType)
            {
            case ValidateCodeType.Number:
                code = GetRandomNums(length);
                break;

            case ValidateCodeType.Hanzi:
                code = GetRandomHanzis(length);
                break;

            default:
                code = GetRandomNumsAndLetters(length);
                break;
            }
            if (code.Length > length)
            {
                code = code.Substring(0, length);
            }
            return(CreateImage(code, codeType));
        }
Exemplo n.º 4
0
        /// <summary>
        /// 获取指定长度的验证码图片
        /// </summary>
        /// <param name="lenght"></param>
        /// <param name="code"></param>
        /// <param name="codeType"></param>
        /// <returns></returns>
        public Bitmap CreateImage(int lenght, out string code, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            lenght.CheckGreaterThan("lenght", 0);

            lenght = lenght < 1 ? 1 : lenght;
            switch (codeType)
            {
            case ValidateCodeType.Number:
                code = "";
                break;

            case ValidateCodeType.NumberAndLetter:
                code = "";
                break;

            default:
                code = "";
                break;
            }
            if (code.Length > lenght)
            {
                code = code.Substring(0, lenght);
            }

            return(CreateImage(code, codeType));
        }
Exemplo n.º 5
0
 /// <summary>
 /// 获取指定长度的验证码字符串
 /// </summary>
 public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
 {
     Check.CheckGreaterThan(length, 0, false, nameof(length));
     return(codeType switch
     {
         ValidateCodeType.Number => GetRandomNums(length),
         ValidateCodeType.Hanzi => GetRandomHanzis(length),
         ValidateCodeType.NumberAndLetter => GetRandomNumsAndLetters(length),
         _ => string.Empty
     });
Exemplo n.º 6
0
        /// <summary>
        /// 获取指定字符串的验证码图片
        /// </summary>
        public Image CreateImage(string code, ValidateCodeType codeType)
        {
            Check.NotNullOrEmpty(code, nameof(code));

            int width       = FontWidth * code.Length + FontWidth,
                height      = FontSize + FontSize / 2,
                flag        = 255 / 2;
            bool  isBgLight = (BgColor.R + BgColor.G + BgColor.B) / 3 > flag;
            Image image     = new Bitmap(null, width, height);

            throw new NotImplementedException();
        }
        /// <summary>
        /// 获取指定长度的验证码字符串
        /// </summary>
        public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            switch (codeType)
            {
            case ValidateCodeType.Number:
                return(GetRandomNums(length));

            case ValidateCodeType.Hanzi:
                return(GetRandomHanzis(length));

            default:
                return(GetRandomNumsAndLetters(length));
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// 发送验证码
        /// </summary>
        /// <param name="mobile"></param>
        private string SendCode(string mobile, ValidateCodeType type)
        {
            var code = StringHelper.RandNum(6);

            _validateCodeRepository.Add(new Tbl_ValidateCode
            {
                ClientIp     = ClientIpHelper.GetInnerIp(),
                ValidateCode = code,
                Mobile       = mobile,
                TypeId       = (int)type,
                DataStatus   = false,
                CreateTime   = DateTime.Now
            });
            return(code);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 获取指定长度的验证码图片
        /// </summary>
        /// <param name="length">长度</param>
        /// <param name="code">验证码</param>
        /// <param name="codeType">验证码类型</param>
        /// <returns></returns>
        public Bitmap CreateImage(int length, out string code,
                                  ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            if (length <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(length));
            }
            length = length < 1 ? 1 : length;
            code   = GetCode(length, codeType);
            if (code.Length > length)
            {
                code = code.Substring(0, length);
            }

            return(CreateImage(code));
        }
Exemplo n.º 10
0
        /// <summary>
        /// 获取指定长度的验证码字符串
        /// </summary>
        /// <param name="length">长度</param>
        /// <param name="codeType">验证码类型</param>
        /// <returns></returns>
        public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            length.CheckGreaterThan(nameof(length), 0);

            switch (codeType)
            {
            case ValidateCodeType.Number:
                return(GetRandomNumbers(length));

            case ValidateCodeType.ChineseChar:
                return(GetRandomChinese(length));

            default:
                return(GetRandomNumbersAndLetters(length));
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 获取指定长度的验证码字符串
        /// </summary>
        public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            length.GreaterThan(0, "验证码长度必须大于0");

            switch (codeType)
            {
            case ValidateCodeType.Number:
                return(GetRandomNums(length));

            case ValidateCodeType.ChineseCharacter:
                return(GetRandomHanzis(length));

            default:
                return(GetRandomNumsAndLetters(length));
            }
        }
Exemplo n.º 12
0
        public string GetCode(int lenght, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            lenght.CheckGreaterThan("lenght", 0);

            switch (codeType)
            {
            case ValidateCodeType.Number:
                GetRandomNums(lenght);
                break;

            case ValidateCodeType.NumberAndLetter:
                break;

            default:
                break;
            }
            return("");
        }
Exemplo n.º 13
0
        /// <summary>
        /// 获取指定长度的验证码字符串
        /// </summary>
        /// <param name="length">长度</param>
        /// <param name="codeType">验证码类型</param>
        /// <returns></returns>
        public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            if (length <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(length));
            }

            switch (codeType)
            {
            case ValidateCodeType.Number:
                return(GetRandomNumbers(length));

            case ValidateCodeType.ChineseChar:
                return(GetRandomChinese(length));

            default:
                return(GetRandomNumbersAndLetters(length));
            }
        }
Exemplo n.º 14
0
        /// <summary>
        ///     获取指定长度的验证码图片
        /// </summary>
        public Bitmap CreateImage(int length, out string code, int imageWidth,
                                  ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            if (length <= 0)
            {
                code = null;
                return(null);
            }

            length = length < 1 ? 1 : length;
            switch (codeType)
            {
            case ValidateCodeType.Number:
                code = GetRandomNums(length);
                break;

            case ValidateCodeType.Letter:
                code = GetRandomLetter(length);
                break;

            case ValidateCodeType.Hanzi:
                code = GetRandomHanzis(length);
                break;

            case ValidateCodeType.Add:
                code = GetRandomAddNum();
                break;

            default:
                code = GetRandomNumsAndLetters(length);
                break;
            }
            if (code.Length > length)
            {
                code = code.Substring(0, length);
            }
            return(CreateImage(code, codeType, imageWidth));
        }
Exemplo n.º 15
0
        public void ProcessRequest(System.Web.HttpContext context)
        {
            RequestVariable _request = RequestVariable.Current;

            string validateCode;
            string type = _request.Get("type", Method.Get, string.Empty);

            string isStyleType = _request.Get("isstyletype", Method.Get, "0");

            string id = _request.Get("id", Method.Get, string.Empty);

            byte[] image;

            if (isStyleType == "1")
            {
                ValidateCodeType validateCodeType = ValidateCodeManager.GetValidateCodeType(type);

                if (validateCodeType == null)
                {
                    return;
                }

                image = validateCodeType.CreateImage(out validateCode);
            }
            else
            {
                image = MaxLabs.bbsMax.ValidateCodes.ValidateCodeManager.CreateImage(type, out validateCode);
            }

            context.Session[Consts.ValidateCode_SessionKey_Prefix + type.ToLower() + id.ToLower().Trim()] = validateCode;

            context.Response.Clear();
            context.Response.ContentType = "image/gif";
            context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            context.Response.Cache.SetNoStore();
            context.Response.BinaryWrite(image);
            context.Response.End();
        }
Exemplo n.º 16
0
        /// <summary>
        /// 生成验证码
        /// </summary>
        /// <param name="type"></param>
        /// <param name="length"></param>
        public static void Render(ValidateCodeType type, int length)
        {
            string code = string.Empty;

            switch (type)
            {
            case ValidateCodeType.Char:
            {
                code = CharCode.GetRandomChar(length);
                break;
            }

            case ValidateCodeType.Chinese:
            {
                code = ChineseCode.GetChinese(length);
                break;
            }

            case ValidateCodeType.Num:
            {
                code = RandomStr.GetRandomNum(length);
                break;
            }
            }
            System.Web.HttpContext.Current.Session[CodeName] = code;

            ImagesHelper images = new ImagesHelper();

            images.Width           = 100;
            images.Height          = 31;
            images.Text            = code;
            images.LineNoise       = ImagesHelper.LineNoiseLevel.Extreme;
            images.BackgroundNoise = ImagesHelper.BackgroundNoiseLevel.Extreme;
            images.FontWarp        = ImagesHelper.FontWarpFactor.Extreme;

            images.CreateImage();
        }
Exemplo n.º 17
0
        /// <summary>
        /// 获取验证码的图片
        /// </summary>
        /// <param name="length">长度</param>
        /// <param name="codeType">类型</param>
        /// <returns></returns>
        public static byte[] GetVerifyCodeImage(int length = 4, ValidateCodeType codeType = ValidateCodeType.Operation)
        {
            switch (codeType)
            {
            case ValidateCodeType.Hanzi:
                VerifyCode = GetRandomHanzis(length);
                break;

            case ValidateCodeType.Number:
                VerifyCode = GetRandomNums(length);
                break;

            case ValidateCodeType.NumberAndLetter:
                VerifyCode = GetRandomNumsAndLetters(length);
                break;

            default:
                VerifyCode = GetRandomOperation();
                break;
            }
            var image = CreateGraphic(VerifyCode);

            return(image);
        }
Exemplo n.º 18
0
        /// <summary>
        /// 获取指定长度的验证码图片
        /// </summary>
        public Image CreateImage(int length, out string code, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            Check.GreaterThan(length, nameof(length), 0);

            switch (codeType)
            {
            case ValidateCodeType.Number:
                code = GetRandomNums(length);
                break;

            case ValidateCodeType.Hanzi:
                code = GetRandomHanzis(length);
                break;

            default:
                code = GetRandomNumsAndLetters(length);
                break;
            }
            if (code.Length > length)
            {
                code = code.Substring(0, length);
            }
            return(CreateImage(code, codeType));
        }
Exemplo n.º 19
0
        public MemoryStream Create(out string code, ValidateCodeType validateCodeType = ValidateCodeType.Number, int numberLength = 4)
        {
            switch (validateCodeType)
            {
            case ValidateCodeType.English:
                code = GetRandomLetters(numberLength);
                break;

            case ValidateCodeType.NumberAndLetter:
                code = GetRandomNumsAndLetters(numberLength);
                break;

            case ValidateCodeType.Hanzi:
                code = GetRandomHanzis(numberLength);
                break;

            default:
                code = GetRandomNums(numberLength);
                break;
            }


            Bitmap       Img    = null;
            Graphics     g      = null;
            MemoryStream ms     = null;
            Random       random = new Random();

            //验证码颜色集合
            Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };

            //验证码字体集合
            string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };


            //定义图像的大小,生成图像的实例
            Img = new Bitmap((int)code.Length * 18, 32);

            g = Graphics.FromImage(Img); //从Img对象生成新的Graphics对象

            g.Clear(Color.White);        //背景设为白色

            //在随机位置画背景点
            for (int i = 0; i < 100; i++)
            {
                int x = random.Next(Img.Width);
                int y = random.Next(Img.Height);
                g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
            }
            //验证码绘制在g中
            for (int i = 0; i < code.Length; i++)
            {
                int   cindex = random.Next(7);                              //随机颜色索引值
                int   findex = random.Next(5);                              //随机字体索引值
                Font  f      = new Font(fonts[findex], 15, FontStyle.Bold); //字体
                Brush b      = new SolidBrush(c[cindex]);                   //颜色
                int   ii     = 4;
                if ((i + 1) % 2 == 0)                                       //控制验证码不在同一高度
                {
                    ii = 2;
                }
                g.DrawString(code.Substring(i, 1), f, b, 3 + (i * 12), ii); //绘制一个验证字符
            }
            ms = new MemoryStream();                                        //生成内存流对象
            Img.Save(ms, ImageFormat.Png);                                  //将此图像以Png图像文件的格式保存到流中

            //回收资源
            g.Dispose();
            Img.Dispose();
            return(ms);
        }
Exemplo n.º 20
0
        /// <summary>
        /// 获取指定字符串的验证码图片
        /// </summary>
        /// <param name="code"></param>
        /// <param name="codeType"></param>
        /// <returns></returns>
        public Bitmap CreateImage(string code, ValidateCodeType codeType)
        {
            code.CheckNotNullOrEmpty("code");

            int       width = FontWidth * code.Length + FontWidth;
            int       height = FontSize + FontSize / 2;
            const int flag = 255 / 2;
            bool      isBgLight = (BgColor.R + BgColor.G + BgColor.B) / 3 > flag;
            Bitmap    image = new Bitmap(width, height);
            Graphics  graphics = Graphics.FromImage(image);
            Brush     brush = new SolidBrush(Color.FromArgb(255 - BgColor.R, 255 - BgColor.G, 255 - BgColor.B));
            int       x, y = 3;

            if (HasBorder)
            {
                graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
            }

            Random rnd = new Random();

            //绘制干扰线
            for (int i = 0; i < RandomLineCount; i++)
            {
                x = rnd.Next(image.Width);
                y = rnd.Next(image.Height);
                int   m         = rnd.Next(image.Width);
                int   n         = rnd.Next(image.Height);
                Color lineColor = !RandomColor
                    ? Color.FromArgb(90, 90, 90)
                    : isBgLight
                    ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 220))
                    : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150));

                Pen pen = new Pen(lineColor, 2);
                graphics.DrawLine(pen, x, y, m, n);
            }

            //绘制干扰点
            int pointCount = (int)(image.Width * image.Height * RandomPointPercent / 100);

            for (int i = 0; i < pointCount; i++)
            {
                x = rnd.Next(image.Width);
                y = rnd.Next(image.Height);
                Color pointColor = isBgLight
                    ? Color.FromArgb(rnd.Next(30, 80), rnd.Next(30, 80), rnd.Next(30, 80))
                    : Color.FromArgb(rnd.Next(150, 200), rnd.Next(150, 200), rnd.Next(150, 200));
                image.SetPixel(x, y, pointColor);
            }

            //绘制文字
            for (int i = 0; i < code.Length; i++)
            {
                rnd = random;
                x   = FontWidth / 4 + FontWidth * i;
                if (RandomPosition)
                {
                    x = rnd.Next(FontWidth / 4) + FontWidth * i;
                    y = rnd.Next(image.Height / 5);
                }
                PointF point = new PointF(x, y);
                if (RandomColor)
                {
                    int r, g, b;
                    if (!isBgLight)
                    {
                        r = rnd.Next(255 - BgColor.R);
                        g = rnd.Next(255 - BgColor.G);
                        b = rnd.Next(255 - BgColor.B);
                        if ((r + g + b) / 3 < flag)
                        {
                            r = 255 - r;
                            g = 255 - g;
                            b = 255 - b;
                        }
                    }
                    else
                    {
                        r = rnd.Next(BgColor.R);
                        g = rnd.Next(BgColor.G);
                        b = rnd.Next(BgColor.B);
                        if ((r + g + b) / 3 > flag)
                        {
                            r = 255 - r;
                            g = 255 - g;
                            b = 255 - b;
                        }
                    }
                    brush = new SolidBrush(Color.FromArgb(r, g, b));
                }
                string fontName = codeType == ValidateCodeType.Chinese
                    ? FontNamesForChinese[rnd.Next(FontNamesForChinese.Count)]
                    : FontNames[rnd.Next(FontNames.Count)];
                Font font = new Font(fontName, FontSize, FontStyle.Bold);
                if (RandomItalic)
                {
                    graphics.TranslateTransform(0, 0);
                    Matrix transform = graphics.Transform;
                    transform.Shear(Convert.ToSingle(rnd.Next(2, 9) / 10d - 0.5), 0.001f);
                    graphics.Transform = transform;
                }
                graphics.DrawString(code.Substring(i, 1), font, brush, point);
                graphics.ResetTransform();
            }

            return(image);
        }
Exemplo n.º 21
0
        /// <summary>
        ///     获取指定长度的验证码图片
        /// </summary>
        public Bitmap CreateImage(int length, out string code, int imageWidth,
            ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            if (length <= 0)
            {
                code = null;
                return null;
            }

            length = length < 1 ? 1 : length;
            switch (codeType)
            {
                case ValidateCodeType.Number:
                    code = GetRandomNums(length);
                    break;
                case ValidateCodeType.Letter:
                    code = GetRandomLetter(length);
                    break;
                case ValidateCodeType.Hanzi:
                    code = GetRandomHanzis(length);
                    break;
                case ValidateCodeType.Add:
                    code = GetRandomAddNum();
                    break;
                default:
                    code = GetRandomNumsAndLetters(length);
                    break;
            }
            if (code.Length > length)
            {
                code = code.Substring(0, length);
            }
            return CreateImage(code, codeType, imageWidth);
        }
Exemplo n.º 22
0
        /// <summary>
        /// 获取指定长度的验证码字符串
        /// </summary>
        public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            length.CheckGreaterThan("length", 0);

            switch (codeType)
            {
                case ValidateCodeType.Number:
                    return GetRandomNums(length);
                case ValidateCodeType.Hanzi:
                    return GetRandomHanzis(length);
                default:
                    return GetRandomNumsAndLetters(length);
            }
        }
Exemplo n.º 23
0
        /// <summary>
        /// 获取指定长度的验证码图片
        /// </summary>
        public Bitmap CreateImage(int length, out string code, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            length.CheckGreaterThan("length", 0);

            length = length < 1 ? 1 : length;
            switch (codeType)
            {
                case ValidateCodeType.Number:
                    code = GetRandomNums(length);
                    break;
                case ValidateCodeType.Hanzi:
                    code = GetRandomHanzis(length);
                    break;
                default:
                    code = GetRandomNumsAndLetters(length);
                    break;
            }
            if (code.Length > length)
            {
                code = code.Substring(0, length);
            }
            return CreateImage(code, codeType);
        }
Exemplo n.º 24
0
        /// <summary>
        /// 获取指定字符串的验证码图片
        /// </summary>
        public Bitmap CreateImage(string code, ValidateCodeType codeType)
        {
            code.CheckNotNullOrEmpty("code");

            int width = FontWidth * code.Length + FontWidth;
            int height = FontSize + FontSize / 2;
            const int flag = 255 / 2;
            bool isBgLight = (BgColor.R + BgColor.G + BgColor.B) / 3 > flag;
            Bitmap image = new Bitmap(width, height);
            Graphics grap = Graphics.FromImage(image);
            grap.Clear(BgColor);
            Brush brush = new SolidBrush(Color.FromArgb(255 - BgColor.R, 255 - BgColor.G, 255 - BgColor.B));
            int x, y = 3;
            if (HasBorder)
            {
                grap.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
            }

            Random rnd = Random;

            //绘制干扰线
            for (int i = 0; i < RandomLineCount; i++)
            {
                x = rnd.Next(image.Width);
                y = rnd.Next(image.Height);
                int m = rnd.Next(image.Width);
                int n = rnd.Next(image.Height);
                Color lineColor = !RandomColor
                    ? Color.FromArgb(90, 90, 90)
                    : isBgLight
                        ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 200))
                        : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150));
                Pen pen = new Pen(lineColor, 2);
                grap.DrawLine(pen, x, y, m, n);
            }

            //绘制干扰点
            for (int i = 0; i < (int)(image.Width * image.Height * RandomPointPercent / 100); i++)
            {
                x = rnd.Next(image.Width);
                y = rnd.Next(image.Height);
                Color pointColor = isBgLight
                    ? Color.FromArgb(rnd.Next(30, 80), rnd.Next(30, 80), rnd.Next(30, 80))
                    : Color.FromArgb(rnd.Next(150, 200), rnd.Next(150, 200), rnd.Next(150, 200));
                image.SetPixel(x, y, pointColor);
            }

            //绘制文字
            for (int i = 0; i < code.Length; i++)
            {
                rnd = Random;
                x = FontWidth / 4 + FontWidth * i;
                if (RandomPosition)
                {
                    x = rnd.Next(FontWidth / 4) + FontWidth * i;
                    y = rnd.Next(image.Height / 5);
                }
                PointF point = new PointF(x, y);
                if (RandomColor)
                {
                    int r, g, b;
                    if (!isBgLight)
                    {
                        r = rnd.Next(255 - BgColor.R);
                        g = rnd.Next(255 - BgColor.G);
                        b = rnd.Next(255 - BgColor.B);
                        if ((r + g + b) / 3 < flag)
                        {
                            r = 255 - r;
                            g = 255 - g;
                            b = 255 - b;
                        }
                    }
                    else
                    {
                        r = rnd.Next(BgColor.R);
                        g = rnd.Next(BgColor.G);
                        b = rnd.Next(BgColor.B);
                        if ((r + g + b) / 3 > flag)
                        {
                            r = 255 - r;
                            g = 255 - g;
                            b = 255 - b;
                        }
                    }
                    brush = new SolidBrush(Color.FromArgb(r, g, b));
                }
                string fontName = codeType == ValidateCodeType.Hanzi
                    ? FontNamesForHanzi[rnd.Next(FontNamesForHanzi.Count)]
                    : FontNames[rnd.Next(FontNames.Count)];
                Font font = new Font(fontName, FontSize, FontStyle.Bold);
                if (RandomItalic)
                {
                    grap.TranslateTransform(0, 0);
                    Matrix transform = grap.Transform;
                    transform.Shear(Convert.ToSingle(rnd.Next(2, 9) / 10d - 0.5), 0.001f);
                    grap.Transform = transform;
                }
                grap.DrawString(code.Substring(i, 1), font, brush, point);
                grap.ResetTransform();
            }

            return image;
        }
Exemplo n.º 25
0
        /// <summary>
        ///     获取指定长度的验证码字符串
        /// </summary>
        public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter)
        {
            if (length <= 0)
                return null;

            switch (codeType)
            {
                case ValidateCodeType.Number:
                    return GetRandomNums(length);
                case ValidateCodeType.Letter:
                    return GetRandomLetter(length);
                case ValidateCodeType.Hanzi:
                    return GetRandomHanzis(length);
                default:
                    return GetRandomNumsAndLetters(length);
            }
        }
Exemplo n.º 26
0
 public static void Render(ValidateCodeType type)
 {
     Render(type, 4);
 }
Exemplo n.º 27
0
        /// <summary>
        ///     获取指定字符串的验证码图片
        /// </summary>
        public Bitmap CreateImage(string code, ValidateCodeType codeType, int imageWidth)
        {
            if (string.IsNullOrEmpty(code))
            {
                return(null);
            }

            float width  = imageWidth;
            float height = imageWidth * 0.36f;
            float scale  = 120.0f / imageWidth;

            FontWidth = (int)(FontSize / scale);

            const int flag      = 255 / 2;
            bool      isBgLight = (BgColor.R + BgColor.G + BgColor.B) / 3 > flag;
            var       image     = new Bitmap((int)width, (int)height);
            Graphics  grap      = Graphics.FromImage(image);

            grap.Clear(BgColor);
            Brush brush = new SolidBrush(Color.FromArgb(255 - BgColor.R, 255 - BgColor.G, 255 - BgColor.B));
            int   x, y = 3;

            if (HasBorder)
            {
                grap.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
            }
            var rnd = new Random((int)DateTime.Now.Ticks);

            //绘制干扰线
            for (int i = 0; i < RandomLineCount; i++)
            {
                x = rnd.Next(image.Width);
                y = rnd.Next(image.Height);
                int   m         = rnd.Next(image.Width);
                int   n         = rnd.Next(image.Height);
                Color lineColor = !RandomColor
                    ? Color.FromArgb(90, 90, 90)
                    : isBgLight
                        ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 200))
                        : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150));

                var pen = new Pen(lineColor, 2);
                grap.DrawLine(pen, x, y, m, n);
            }

            //绘制干扰点
            for (int i = 0; i < (int)(image.Width * image.Height * RandomPointPercent / 100); i++)
            {
                x = rnd.Next(image.Width);
                y = rnd.Next(image.Height);
                Color pointColor = isBgLight
                    ? Color.FromArgb(rnd.Next(30, 80), rnd.Next(30, 80), rnd.Next(30, 80))
                    : Color.FromArgb(rnd.Next(150, 200), rnd.Next(150, 200), rnd.Next(150, 200));
                image.SetPixel(x, y, pointColor);
            }

            //绘制文字
            for (int i = 0; i < code.Length; i++)
            {
                rnd = new Random(i * (int)DateTime.Now.Ticks);
                x   = FontWidth / 4 + FontWidth * i;
                if (RandomPosition)
                {
                    x = rnd.Next(FontWidth / 4) + FontWidth * i;
                    y = rnd.Next(image.Height / 5);
                }
                var point = new PointF(x, 4);
                if (RandomColor)
                {
                    int r, g, b;
                    if (!isBgLight)
                    {
                        r = rnd.Next(255 - BgColor.R);
                        g = rnd.Next(255 - BgColor.G);
                        b = rnd.Next(255 - BgColor.B);
                        if ((r + g + b) / 3 < flag)
                        {
                            r = 255 - r;
                            g = 255 - g;
                            b = 255 - b;
                        }
                    }
                    else
                    {
                        r = rnd.Next(BgColor.R);
                        g = rnd.Next(BgColor.G);
                        b = rnd.Next(BgColor.B);
                        if ((r + g + b) / 3 > flag)
                        {
                            r = 255 - r;
                            g = 255 - g;
                            b = 255 - b;
                        }
                    }
                    brush = new SolidBrush(Color.FromArgb(r, g, b));
                }
                string fontName = codeType == ValidateCodeType.Hanzi
                    ? FontNamesForHanzi[rnd.Next(FontNamesForHanzi.Count)]
                    : FontNames[rnd.Next(FontNames.Count)];
                var font = new Font(fontName, FontWidth, FontStyle.Regular);
                // "+"符号不做倾斜处理
                if (RandomItalic && !code.Substring(i, 1).Equals("+"))
                {
                    grap.TranslateTransform(0, 0);
                    Matrix transform = grap.Transform;
                    transform.Shear(Convert.ToSingle(rnd.Next(2, 9) / 10d - 0.5), 0.001f);
                    grap.Transform = transform;
                }
                grap.DrawString(code.Substring(i, 1), font, brush, point);
                grap.ResetTransform();
            }

            return(image);
        }
Exemplo n.º 28
0
        public void ProcessRequest(HttpContext context)
        {
            string           _validateCode = string.Empty;
            string           _validateType = context.Request.Params["style"];
            ValidateCodeType _createCode   = null;

            if (string.IsNullOrEmpty(_validateType))
            {
                _createCode = new ValidateCode_Style1();
            }
            else
            {
                if (_validateType.CompareIgnoreCase("type1"))
                {
                    _createCode = new ValidateCode_Style1();
                }
                else if (_validateType.CompareIgnoreCase("type2"))
                {
                    _createCode = new ValidateCode_Style2();
                }
                else if (_validateType.CompareIgnoreCase("type3"))
                {
                    _createCode = new ValidateCode_Style3();
                }
                else if (_validateType.CompareIgnoreCase("type4"))
                {
                    _createCode = new ValidateCode_Style4();
                }
                else if (_validateType.CompareIgnoreCase("type5"))
                {
                    _createCode = new ValidateCode_Style5();
                }
                else if (_validateType.CompareIgnoreCase("type6"))
                {
                    _createCode = new ValidateCode_Style6();
                }
                else if (_validateType.CompareIgnoreCase("type7"))
                {
                    _createCode = new ValidateCode_Style7();
                }
                else if (_validateType.CompareIgnoreCase("type8"))
                {
                    _createCode = new ValidateCode_Style8();
                }
                else if (_validateType.CompareIgnoreCase("type9"))
                {
                    _createCode = new ValidateCode_Style9();
                }
                else if (_validateType.CompareIgnoreCase("type10"))
                {
                    _createCode = new ValidateCode_Style10();
                }
                else if (_validateType.CompareIgnoreCase("type11"))
                {
                    _createCode = new ValidateCode_Style11();
                }
                else if (_validateType.CompareIgnoreCase("type12"))
                {
                    _createCode = new ValidateCode_Style12();
                }
                else if (_validateType.CompareIgnoreCase("type13"))
                {
                    _createCode = new ValidateCode_Style13();
                }
                else if (_validateType.CompareIgnoreCase("type14"))
                {
                    _createCode = new ValidateCode_Style14();
                }
                else
                {
                    _createCode = new ValidateCode_Style1();
                }
            }

            byte[] _buffer = _createCode.CreateImage(out _validateCode);
            context.Session["validateCode"] = _validateCode;
            context.Response.ClearContent();
            context.Response.ContentType = "image/Gif";
            context.Response.BinaryWrite(_buffer);
        }
Exemplo n.º 29
0
        /// <summary>
        /// 获取指定字符串的验证码图片
        /// </summary>
        public Bitmap CreateImage(string code, ValidateCodeType codeType)
        {
            int       width     = FontWidth * code.Length + FontWidth;
            int       height    = FontSize + FontSize / 2;
            const int flag      = 255 / 2;
            bool      isBgLight = (BgColor.R + BgColor.G + BgColor.B) / 3 > flag;
            Bitmap    image     = new Bitmap(width, height);
            Graphics  grap      = Graphics.FromImage(image);

            grap.Clear(BgColor);
            Brush brush = new SolidBrush(Color.FromArgb(255 - BgColor.R, 255 - BgColor.G, 255 - BgColor.B));
            int   x, y = 3;

            if (HasBorder)
            {
                grap.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
            }

            Random rnd = Random;

            #region ////绘制干扰线 --弃用直线,改为曲线
            //for (int i = 0; i < RandomLineCount; i++)
            //{
            //    x = rnd.Next(image.Width);
            //    y = rnd.Next(image.Height);
            //    int m = rnd.Next(image.Width);
            //    int n = rnd.Next(image.Height);
            //    Color lineColor = !RandomColor
            //        ? Color.FromArgb(90, 90, 90)
            //        : isBgLight
            //            ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 200))
            //            : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150));
            //    Pen pen = new Pen(lineColor, 2);
            //    grap.DrawLine(pen, x, y, m, n);
            //}
            #endregion

            #region //绘制干扰线
            for (int index = 0; index < RandomLineCount; index++)
            {
                float XSpace    = image.Width / 6.0f;
                Color lineColor = !RandomColor
                    ? Color.FromArgb(90, 90, 90)
                    : isBgLight
                        ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 200))
                        : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150));

                Pen      CurvePen    = new Pen(lineColor, 3);
                PointF[] CurvePointF = new PointF[image.Width / 6];
                float    keys        = 0;
                float    values      = 0;
                for (int i = 0; i < image.Width / 6; i++)
                {
                    keys           = i * XSpace;
                    values         = Random.Next(image.Height);
                    CurvePointF[i] = new PointF(keys, values);
                }
                grap.DrawCurve(CurvePen, CurvePointF, 0.5f);
            }
            #endregion

            #region  ////绘制文字
            for (int i = 0; i < code.Length; i++)
            {
                rnd = Random;
                x   = FontWidth / 4 + FontWidth * i;
                if (RandomPosition)
                {
                    x = rnd.Next(FontWidth / 4) + FontWidth * i;
                    y = rnd.Next(image.Height / 5);
                }
                PointF point = new PointF(x, y);
                if (RandomColor)
                {
                    int r, g, b;
                    if (!isBgLight)
                    {
                        r = rnd.Next(255 - BgColor.R);
                        g = rnd.Next(255 - BgColor.G);
                        b = rnd.Next(255 - BgColor.B);
                        if ((r + g + b) / 3 < flag)
                        {
                            r = 255 - r;
                            g = 255 - g;
                            b = 255 - b;
                        }
                    }
                    else
                    {
                        r = rnd.Next(BgColor.R);
                        g = rnd.Next(BgColor.G);
                        b = rnd.Next(BgColor.B);
                        if ((r + g + b) / 3 > flag)
                        {
                            r = 255 - r;
                            g = 255 - g;
                            b = 255 - b;
                        }
                    }
                    brush = new SolidBrush(Color.FromArgb(r, g, b));
                }
                string fontName = codeType == ValidateCodeType.Hanzi
                    ? FontNamesForHanzi[rnd.Next(FontNamesForHanzi.Count)]
                    : FontNames[rnd.Next(FontNames.Count)];
                Font font = new Font(fontName, FontSize, FontStyle.Bold);
                if (RandomItalic)
                {
                    grap.TranslateTransform(0, 0);
                    Matrix transform = grap.Transform;
                    transform.Shear(Convert.ToSingle(rnd.Next(2, 9) / 10d - 0.5), 0.001f);
                    grap.Transform = transform;
                }
                grap.DrawString(code.Substring(i, 1), font, brush, point);
                grap.ResetTransform();
            }
            #endregion

            ///扭曲
            if (IsTwistImage)
            {
                image = TwistImage(image, true, 3);
            }

            #region //绘制干扰点
            for (int i = 0; i < (int)(image.Width * image.Height * RandomPointPercent / 100); i++)
            {
                x = rnd.Next(image.Width);
                y = rnd.Next(image.Height);
                Color pointColor = isBgLight
                    ? Color.FromArgb(rnd.Next(30, 80), rnd.Next(30, 80), rnd.Next(30, 80))
                    : Color.FromArgb(rnd.Next(150, 200), rnd.Next(150, 200), rnd.Next(150, 200));
                image.SetPixel(x, y, pointColor);
            }
            #endregion

            return(image);
        }
Exemplo n.º 30
0
        /// <summary>
        ///     获取指定字符串的验证码图片
        /// </summary>
        public Bitmap CreateImage(string code, ValidateCodeType codeType, int imageWidth)
        {
            if (string.IsNullOrEmpty(code))
                return null;

            float width = imageWidth;
            float height = imageWidth*0.36f;
            float scale = 120.0f/imageWidth;
            FontWidth = (int) (FontSize/scale);

            const int flag = 255/2;
            bool isBgLight = (BgColor.R + BgColor.G + BgColor.B)/3 > flag;
            var image = new Bitmap((int) width, (int) height);
            Graphics grap = Graphics.FromImage(image);
            grap.Clear(BgColor);
            Brush brush = new SolidBrush(Color.FromArgb(255 - BgColor.R, 255 - BgColor.G, 255 - BgColor.B));
            int x, y = 3;
            if (HasBorder)
            {
                grap.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
            }
            var rnd = new Random((int) DateTime.Now.Ticks);

            //绘制干扰线
            for (int i = 0; i < RandomLineCount; i++)
            {
                x = rnd.Next(image.Width);
                y = rnd.Next(image.Height);
                int m = rnd.Next(image.Width);
                int n = rnd.Next(image.Height);
                Color lineColor = !RandomColor
                    ? Color.FromArgb(90, 90, 90)
                    : isBgLight
                        ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 200))
                        : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150));
                var pen = new Pen(lineColor, 2);
                grap.DrawLine(pen, x, y, m, n);
            }

            //绘制干扰点
            for (int i = 0; i < (int) (image.Width*image.Height*RandomPointPercent/100); i++)
            {
                x = rnd.Next(image.Width);
                y = rnd.Next(image.Height);
                Color pointColor = isBgLight
                    ? Color.FromArgb(rnd.Next(30, 80), rnd.Next(30, 80), rnd.Next(30, 80))
                    : Color.FromArgb(rnd.Next(150, 200), rnd.Next(150, 200), rnd.Next(150, 200));
                image.SetPixel(x, y, pointColor);
            }

            //绘制文字
            for (int i = 0; i < code.Length; i++)
            {
                rnd = new Random(i*(int) DateTime.Now.Ticks);
                x = FontWidth/4 + FontWidth*i;
                if (RandomPosition)
                {
                    x = rnd.Next(FontWidth/4) + FontWidth*i;
                    y = rnd.Next(image.Height/5);
                }
                var point = new PointF(x, 4);
                if (RandomColor)
                {
                    int r, g, b;
                    if (!isBgLight)
                    {
                        r = rnd.Next(255 - BgColor.R);
                        g = rnd.Next(255 - BgColor.G);
                        b = rnd.Next(255 - BgColor.B);
                        if ((r + g + b)/3 < flag)
                        {
                            r = 255 - r;
                            g = 255 - g;
                            b = 255 - b;
                        }
                    }
                    else
                    {
                        r = rnd.Next(BgColor.R);
                        g = rnd.Next(BgColor.G);
                        b = rnd.Next(BgColor.B);
                        if ((r + g + b)/3 > flag)
                        {
                            r = 255 - r;
                            g = 255 - g;
                            b = 255 - b;
                        }
                    }
                    brush = new SolidBrush(Color.FromArgb(r, g, b));
                }
                string fontName = codeType == ValidateCodeType.Hanzi
                    ? FontNamesForHanzi[rnd.Next(FontNamesForHanzi.Count)]
                    : FontNames[rnd.Next(FontNames.Count)];
                var font = new Font(fontName, FontWidth, FontStyle.Regular);
                // "+"符号不做倾斜处理
                if (RandomItalic && !code.Substring(i, 1).Equals("+"))
                {
                    grap.TranslateTransform(0, 0);
                    Matrix transform = grap.Transform;
                    transform.Shear(Convert.ToSingle(rnd.Next(2, 9)/10d - 0.5), 0.001f);
                    grap.Transform = transform;
                }
                grap.DrawString(code.Substring(i, 1), font, brush, point);
                grap.ResetTransform();
            }

            return image;
        }