今天看到一个源码,里面有产生验证码的代码。于是反编译了一下。
现在将他的代码贴出来。(我改了一点点,以及打了部分注释)
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; } /// <summary> /// 产生随机的验证码并加入Session /// </summary> /// <param name="length">验证码长度</param> /// <returns></returns> 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; } /// <summary> /// 根据长度产生验证码 /// 并将验证码画成图片 /// </summary> /// <param name="length">验证码长度</param> public void CreateValidateImage(int length) { this.code = this.CreateCode(length); this.CreateValidateImage(this.code); } /// <summary> /// 根据产生的验证码生成图片 /// </summary> /// <param name="code">验证码</param> 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直接使用