- using System;
- using System.Collections;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.Drawing.Imaging;
- using System.web;
- using System.Web.SessionState;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.htmlControls;
- using System.IO;
- namespace Shop
- {
- /// <summary>
- /// Summary description for ValidateCode.
- /// </summary>
- public class ValidateCode : System.Web.UI.Page
- {
- /// <summary>
- /// Validation Code generated fromt these charaters.
- /// Note: l,L 1(number), o, O, 0(number) are removed
- /// </summary>
- private const string strValidateCodeBound = "abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ23456789";
- private static string[] Fonts = new string[] { "Helvetica",
- "Geneva",
- "sans-serif",
- "Verdana",
- "Times New Roman",
- "Courier New",
- "Arial"
- };
- #region Web Form Designer generated code
- override protected void OnInit(EventArgs e)
- {
- //
- // CODEGEN: This call is required by the ASP.NET Web Form Designer.
- //
- InitializeComponent();
- base.OnInit(e);
- }
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- private void InitializeComponent()
- {
- this.Load += new System.EventHandler(this.Page_Load);
- }
- #endregion
- /// <summary>
- /// event handler of page load
- /// </summary>
- private void Page_Load(object sender, System.EventArgs e)
- {
- if(!IsPostBack)
- {
- string str_ValidateCode = GetRandomString(6);
- Session["ValidateCode"] = str_ValidateCode;
- CreateImage(str_ValidateCode);
- }
- }
- /// <summary>
- /// Generate random string
- /// </summary>
- private string GetRandomString(int int_NumberLength)
- {
- string valString = string.Empty;
- Random theRandomNumber = new Random((int)DateTime.Now.Ticks);
- for (int int_index = 0; int_index < int_NumberLength; int_index++)
- valString += strValidateCodeBound[theRandomNumber.Next(strValidateCodeBound.Length - 1)].ToString();
- return valString;
- }
- /// <summary>
- /// Generate random Color
- /// </summary>
- private Color GetRandomColor()
- {
- Random RandomNum_First = new Random((int)DateTime.Now.Ticks);
- System.Threading.Thread.Sleep(RandomNum_First.Next(50));
- Random RandomNum_Sencond = new Random((int)DateTime.Now.Ticks);
- int int_Red = RandomNum_First.Next(256);
- int int_Green = RandomNum_Sencond.Next(256);
- int int_Blue = (int_Red + int_Green > 400) ? 0 : 400 - int_Red - int_Green;
- int_Blue = (int_Blue > 255) ? 255 : int_Blue;
- return Color.FromArgb(int_Red, int_Green, int_Blue);
- }
- /// <summary>
- /// Create Validation Code Image
- /// </summary>
- private void CreateImage(string str_ValidateCode)
- {
- int int_ImageWidth = str_ValidateCode.Length * 22;
- Random newRandom = new Random();
- Bitmap theBitmap = new Bitmap(int_ImageWidth + 6 , 38);
- Graphics theGraphics = Graphics.FromImage(theBitmap);
- theGraphics.Clear(Color.White);
- drawLine(theGraphics, theBitmap, newRandom);
- theGraphics.DrawRectangle(new Pen(Color.LightGray, 1), 0, 0, theBitmap.Width - 1, theBitmap.Height -1 );
- for (int int_index = 0; int_index < str_ValidateCode.Length; int_index++)
- {
- Matrix X = new Matrix();
- X.Shear((float)newRandom.Next(0,300)/1000 - 0.25f, (float)newRandom.Next(0,100)/1000 - 0.05f);
- theGraphics.Transform = X;
- string str_char = str_ValidateCode.Substring(int_index, 1);
- System.Drawing.Drawing2D.LinearGradientBrush newBrush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, theBitmap.Width, theBitmap.Height), Color.Blue, Color.DarkRed, 1.2f, true);
- Point thePos = new Point(int_index * 21 + 1 + newRandom.Next(3), 1 + newRandom.Next(13));
- Font theFont = new Font(Fonts[newRandom.Next(Fonts.Length -1)], newRandom.Next(14,18), FontStyle.Bold);
- theGraphics.DrawString(str_char, theFont, newBrush, thePos);
- }
- drawPoint(theBitmap, newRandom);
- MemoryStream ms = new MemoryStream();
- theBitmap.Save(ms, ImageFormat.Png);
- Response.ClearContent();
- Response.ContentType = "image/Png";
- Response.BinaryWrite(ms.ToArray());
- theGraphics.Dispose();
- theBitmap.Dispose();
- Response.End();
- }
- /// <summary>
- /// Draw Line for noise
- /// </summary>
- private void drawLine(Graphics gfc,Bitmap img, Random ran)
- {
- for (int i = 0; i < 10; i++)
- {
- int x1 = ran.Next(img.Width);
- int y1 = ran.Next(img.Height);
- int x2 = ran.Next(img.Width);
- int y2 = ran.Next(img.Height);
- gfc.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
- }
- }
- /// <summary>
- /// Draw Point for noise
- /// </summary>
- private void drawPoint(Bitmap img, Random ran)
- {
- for (int i = 0; i < 30; i++)
- {
- int x = ran.Next(img.Width);
- int y = ran.Next(img.Height);
- img.SetPixel(x,y,Color.FromArgb(ran.Next()));
- }
- }
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/0204201512081.html
来源: http://www.codesnippet.cn/detail/0204201512081.html