ASP.NET beautiful appearance verification code

Effect Preview:

 

1. random code and generate image stream

public  class ValidateCode 
    { 
        ///  <Summary> 
        /// generate a graphical codes.
        ///  </ Summary> 
        ///  <param name = "Code"> Outgoing codes. </ param> 
        ///  <param name = "CodeLength"> codes number of characters. </ param> 
        ///  <param name = "the Width"> </ param> 
        ///  <param name = "the Height"> </ param> 
        ///  <param name = "the FontSize"> </ param> 
        / //  <Returns> </ Returns> 
        public  static  byte [] CreateValidateGraphic ( OUT String Code,The Height, int the FontSize) 
        { 
            String sCode = String.Empty;
             // color list, a verification code, line noise, noise 
            Color [] oColors = { 
             System.Drawing.Color.Black, 
             System.Drawing.Color.Red, 
             the System .Drawing.Color.Blue, 
             System.Drawing.Color.Green, 
             System.Drawing.Color.Orange, 
             System.Drawing.Color.Brown, 
             System.Drawing.Color.Brown, 
             System.Drawing.Color.DarkBlue 
            }; 
            // list of fonts, codes for 
            String [] = {oFontNames "New Roman Times " , " the MS Mincho " , " Book Antiqua " , " Gungsuh " , " the PMingLiU " , " Impact " };
             // verification code character set, removed some confusing characters 
            char [] = oCharacter {
        ' 2 ' , ' 3 ' , ' 4 ' , ' 5 ' , ' 6 ' , '8','9',
       'A','B','C','D','E','F','G','H','J','K', 'L','M','N','P','R','S','T','W','X','Y'
      };
            Random oRnd = new Random();
            Bitmap oBmp = null;
            Graphics oGraphics = null;
            int N1 = 0;
            System.Drawing.Point oPoint1 = default(System.Drawing.Point);
            System.Drawing.Point oPoint2 = default(System.Drawing.Point);
            string sFontName = null;
            Font oFont = null;
            Color oColor = default(Color);

            //生成驗證碼字串
            for (N1 = 0; N1 <= CodeLength - 1; N1++)
            {
                sCode += oCharacter[oRnd.Next(oCharacter.Length)];
            }

            oBmp = new Bitmap(Width, Height);
            oGraphics = Graphics.FromImage(oBmp);
            oGraphics.Clear(System.Drawing.Color.White);
            try
            {
                for (N1 = 0; N1 <= 4; N1++)
                {
                    //畫噪線
                    oPoint1.X = oRnd.Next(Width);
                    oPoint1.Y = oRnd.Next(Height);
                    oPoint2.X = oRnd.Next(Width);
                    oPoint2.Y = oRnd.Next(Height);
                    oColor = oColors[oRnd.Next(oColors.Length)];
                    oGraphics.DrawLine(new Pen(oColor), oPoint1, oPoint2);
                }

                float spaceWith = 0, dotX = 0, dotY = 0;
                if (CodeLength != 0)
                {
                    spaceWith = (Width - FontSize * CodeLength - 10) / CodeLength;
                }

                for (N1 = 0; N1 <= sCode.Length - 1; N1++)
                {
                    //畫驗證碼字串
                    sFontName = oFontNames[oRnd.Next(oFontNames.Length)];
                    oFont = new Font(sFontName, FontSize, FontStyle.Italic);
                    oColor = oColors[oRnd.Next(oColors.Length)];

                    dotY = (Height - oFont.Height) / 2 + 2;//中心下移2像素
                    dotX = Convert.ToSingle(N1) * FontSize + (N1 + 1) * spaceWith;

                    oGraphics.DrawString(sCode[N1].ToString(), oFont, new SolidBrush(oColor), dotX, dotY);
                }

                for (int i = 0; i <= 30; i++)
                {
                    //畫噪點
                    int x = oRnd.Next(oBmp.Width);
                    int y = oRnd.Next(oBmp.Height);
                    Color clr = oColors[oRnd.Next(oColors.Length)];
                    oBmp.SetPixel(x, y, clr);
                }

                Code = sCode;
                //保存图片数据
                MemoryStream stream = new MemoryStream();
                oBmp.Save(stream, ImageFormat.Jpeg);
                //输出图片流
                return stream.ToArray();
            }
            finally
            {
                oGraphics.Dispose();
            }
        }
    }

Picture stream in response to the page in the form of pictures

public class ValidateCodeController : Controller
    {
        public ActionResult GetImg()
        {
            int width = ConverterHelper.ObjToInt(Request.Params["width"], 100);
            int height = ConverterHelper.ObjToInt(Request.Params["height"], 40);
            int fontsize = ConverterHelper.ObjToInt(Request.Params["fontsize"], 20);
            string code = string.Empty;
            byte[] bytes = ValidateCode.CreateValidateGraphic(out code, 4, width, height, fontsize);
            SessionHelper.SetValiCode(code);
            return File(bytes, @"image/jpeg");
        }

    }

Display and refresh the page (img + js)

<img id="GL_StandardCode"  style="cursor: pointer;" src="@Url.Action("GetImg", "ValidateCode")[email protected]" title="看不清,点击换一张" />

            $("#GL_StandardCode").click(function () {
                var newSrc = "@Url.Action("GetImg", "ValidateCode")" + "?t=" + (new Date()).getTime();
                this.src=newSrc;
                return false;
            });

Log in judging the value SESSION

 string pCode = Request.Params["GL_CodeInput"];
        string sCode = SessionHelper.GetValiCode();
        if (string.IsNullOrEmpty(pCode))
        {
            resultMsg = "请输入验证码";
        }
        else if (string.IsNullOrEmpty(sCode))
        {
            resultMsg = "验证码过期";
        }
        else if (pCode.ToLower() != sCode.ToLower())
        {
            resultMsg = " Incorrect verification code " ; 
        }

 

Guess you like

Origin www.cnblogs.com/codedisco/p/12540639.html