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 " ; }