using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Text; using System.Drawing.Drawing2D; using System.Drawing; using System.IO; using System.Drawing.Imaging; public partial class ValidateCode : System.Web.UI.Page { private string code; private const int ImageHeigth = 22; //验证码图片的高度 private const double ImageLengthBase = 12.5; //验证码图片中每个字符的宽度 private const int ImageLineNumber = 25; //噪音线的数量 private const int ImagePointNumber = 100; //噪点的数量 private int length; public static string VALIDATECODEKEY; //此处用来保存验证码到Session的Key的名称 //静态构造函数初始化验证码在Session中的Key名称 static ValidateCode() { VALIDATECODEKEY = "VALIDATECODEKEY" ; } //设置验证码的长度和内容 public ValidateCode() { this .length = 4; this .code = string .Empty; } /// /// 产生随机的验证码并加入Session /// /// 验证码长度 /// public string CreateCode( int length) { if (length <= 0) { return string .Empty; } Random random = new Random(); StringBuilder builder = new StringBuilder(); //产生随机的验证码并拼接起来 for ( int i = 0; i < length; i++) { builder.Append(random.Next(0, 10)); } this .code = builder.ToString(); this .Session[VALIDATECODEKEY] = this .code; return this .code; } /// /// 根据长度产生验证码 /// 并将验证码画成图片 /// /// 验证码长度 public void CreateValidateImage( int length) { this .code = this .CreateCode(length); this .CreateValidateImage( this .code); } /// /// 根据产生的验证码生成图片 /// /// 验证码 public void CreateValidateImage( string code) { if (! string .IsNullOrEmpty(code)) { this .Session[VALIDATECODEKEY] = code; //初始化位图Bitmap对象,指定图片对象的大小(宽,高) Bitmap image = new Bitmap(( int )Math.Ceiling(( double )(code.Length * ImageLengthBase)), ImageHeigth); //初始化一块画布 Graphics graphics = Graphics.FromImage(image); Random random = new Random(); try { int num5; graphics.Clear(Color.White); //绘制噪音线 for (num5 = 0; num5 < ImageLineNumber; num5++) { int num = random.Next(image.Width); int num3 = random.Next(image.Height); int num2 = random.Next(image.Width); int num4 = random.Next(image.Height); graphics.DrawLine( new Pen(Color.Silver), num, num3, num2, num4); } //验证码字体样式 Font font = new Font( "Tahoma" , 12, FontStyle.Italic | FontStyle.Bold); LinearGradientBrush brush = new LinearGradientBrush( new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true ); //绘制验证码到画布 graphics.DrawString(code, font, brush, ( float )2, ( float )2); //绘制噪点 for (num5 = 0; num5 < ImagePointNumber; num5++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } graphics.DrawRectangle( new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); MemoryStream stream = new MemoryStream(); //保存图片 image.Save(stream, ImageFormat.Gif); base .Response.ClearContent(); base .Response.ContentType = "image/Gif" ; base .Response.BinaryWrite(stream.ToArray()); } finally { graphics.Dispose(); image.Dispose(); } } } protected override void OnLoad(EventArgs e) { this .CreateValidateImage( this .length); } // Properties public string Code { get { return this .Code; } } public int Length { get { return this .length; } set { this .length = value; } } } |
再次申明非本人原创。可以到网上下载ASPNETAJAXWeb.ValidateCode.dll直接使用