<%@ WebHandler Language="C#" Class="Captcha" %> using System; using System.Web; using System.Drawing.Drawing2D; using System.Drawing; public class Captcha : IHttpHandler, System.Web.SessionState.IRequiresSessionState { public void ProcessRequest(HttpContext context) { //string cvalue = context.Request.QueryString["cvalue"].ToString(); string number = RandomString(4); context.Session["CaptchCode"] = number; string cvalue = number; int iHeight = 35; int iWidth = 100; Random oRandom = new Random(); int[] aBackgroundNoiseColor = new int[] { 255, 255, 255 }; int[] aTextColor = new int[] { 0, 0, 0 }; int[] aFontEmSizes = new int[] { 15, 15, 15, 15, 15 }; string[] aFontNames = new string[] { "Arial" }; FontStyle[] aFontStyles = new System.Drawing.FontStyle[] { FontStyle.Bold }; HatchStyle[] aHatchStyles = new System.Drawing.Drawing2D.HatchStyle[] { HatchStyle.BackwardDiagonal, HatchStyle.Cross, HatchStyle.DashedDownwardDiagonal, HatchStyle.DashedHorizontal, HatchStyle.DashedUpwardDiagonal, HatchStyle.DashedVertical, HatchStyle.DiagonalBrick, HatchStyle.DiagonalCross, HatchStyle.Divot, HatchStyle.DottedDiamond, HatchStyle.DottedGrid, HatchStyle.ForwardDiagonal, HatchStyle.Horizontal, HatchStyle.HorizontalBrick, HatchStyle.LargeCheckerBoard, HatchStyle.LargeConfetti, HatchStyle.LargeGrid, HatchStyle.LightDownwardDiagonal, HatchStyle.LightHorizontal, HatchStyle.LightUpwardDiagonal, HatchStyle.LightVertical, HatchStyle.Max, HatchStyle.Min, HatchStyle.NarrowHorizontal, HatchStyle.NarrowVertical, HatchStyle.OutlinedDiamond, HatchStyle.Plaid, HatchStyle.Shingle, HatchStyle.SmallCheckerBoard, HatchStyle.SmallConfetti, HatchStyle.SmallGrid, HatchStyle.SolidDiamond, HatchStyle.Sphere, HatchStyle.Trellis, HatchStyle.Vertical, HatchStyle.Wave, HatchStyle.Weave, HatchStyle.WideDownwardDiagonal, HatchStyle.WideUpwardDiagonal, HatchStyle.ZigZag }; //Get Captcha in Session string sCaptchaText = cvalue; //Creates an output Bitmap Bitmap oOutputBitmap = new Bitmap(iWidth, iHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb); Graphics oGraphics = Graphics.FromImage(oOutputBitmap); oGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; //Create a Drawing area RectangleF oRectangleF = new RectangleF(0, 0, iWidth, iHeight); Brush oBrush = default(Brush); //Draw background (Lighter colors RGB 100 to 255) oBrush = new HatchBrush(aHatchStyles[oRandom.Next(aHatchStyles.Length - 1)], Color.FromArgb((oRandom.Next(255, 255)), (oRandom.Next(255, 255)), (oRandom.Next(255, 255))), Color.White); oGraphics.FillRectangle(oBrush, oRectangleF); System.Drawing.Drawing2D.Matrix oMatrix = new System.Drawing.Drawing2D.Matrix(); int i = 0; for (i = 0; i <= sCaptchaText.Length - 1; i++) { oMatrix.Reset(); int iChars = sCaptchaText.Length; int x = iWidth / (iChars + 1) * i + 5; int y = iHeight / 2; //Rotate text Random //oMatrix.RotateAt(oRandom.Next(-40, 40), new PointF(x, y)); oGraphics.Transform = oMatrix; //Draw the letters with Random Font Type, Size and Color oGraphics.DrawString ( //Text sCaptchaText.Substring(i, 1), //Random Font Name and Style new Font(aFontNames[oRandom.Next(aFontNames.Length - 1)], aFontEmSizes[oRandom.Next(aFontEmSizes.Length - 1)], aFontStyles[oRandom.Next(aFontStyles.Length - 1)]), //Random Color (Darker colors RGB 0 to 100) new SolidBrush(Color.FromArgb(oRandom.Next(0, 0), oRandom.Next(0, 0), oRandom.Next(0, 0))), x, oRandom.Next(10, 10) ); oGraphics.ResetTransform(); } System.IO.MemoryStream oMemoryStream = new System.IO.MemoryStream(); oOutputBitmap.Save(oMemoryStream, System.Drawing.Imaging.ImageFormat.Png); byte[] oBytes = oMemoryStream.GetBuffer(); oOutputBitmap.Dispose(); oMemoryStream.Close(); context.Response.BinaryWrite(oBytes); context.Response.End(); } public bool IsReusable { get { return false; } } public static string RandomString(int length) { var chars = "0123456789"; var stringChars = new char[length]; var random = new Random(); for (int i = 0; i < stringChars.Length; i++) { stringChars[i] = chars[random.Next(chars.Length)]; } var finalString = new String(stringChars); return finalString; } }