using System;
using System.Configuration; using System.IO; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; public partial class GetValidateCode : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 Response.ClearContent(); Response.ContentType = "images/Png"; Response.BinaryWrite(GetVImageStream().ToArray()); } #region 产生图片内存流 /// <summary> /// 产生图片内存流 /// </summary> /// <returns>图片内存流</returns> private MemoryStream GetVImageStream() { MemoryStream ImageMemoryStream = new MemoryStream(); string VCodeString = GetVCode(4); ConfigurationManager.AppSettings["code"] = VCodeString; Font VCodeFont = new Font("Arial", 14, FontStyle.Bold); SolidBrush VCodeBrush = new SolidBrush(Color.SandyBrown); Pen LinePen = new Pen(Color.Ivory, 1); Bitmap Tmap = new Bitmap(VCodeString.Length * 19, 24); Graphics TGrphics; TGrphics = Graphics.FromImage(Tmap); TGrphics.Clear(BackGroundColor(200, 50)); //产生干扰线 for (int i = 1; i <= 6; i++) { int TmpPosition = i * 4; Color LineColor = BackGroundColor(100, 155); LinePen.Color = LineColor; TGrphics.DrawLine(LinePen, 0, TmpPosition, VCodeString.Length * 19, 0); LineColor = BackGroundColor(100, 155); LinePen.Color = LineColor; TGrphics.DrawLine(LinePen, 0, 24, VCodeString.Length * 19, TmpPosition); } //产生干扰线 TGrphics.DrawString(VCodeString, VCodeFont, VCodeBrush, VCodeString.Length, 1); Tmap.Save(ImageMemoryStream, System.Drawing.Imaging.ImageFormat.Png); Tmap.Dispose(); TGrphics.Dispose(); return ImageMemoryStream; } #endregion #region 随机返回背景色 /// <summary> /// 随机返回颜色 /// </summary> /// <param name="BeginRandomNumber">指定颜色开始的最小值</param> /// <param name="RandomNumber">指定颜色值波动的范围</param> /// <returns>随机的Color</returns> private Color BackGroundColor(int BeginRandomNumber, int RandomNumber) { int ColorR = 0; int ColorG = 0; int ColorB = 0; Random TRandom = new Random(); ColorR = BeginRandomNumber + TRandom.Next(RandomNumber); ColorG = BeginRandomNumber + TRandom.Next(RandomNumber); ColorB = BeginRandomNumber + TRandom.Next(RandomNumber); Color ColorBG = Color.FromArgb(ColorR, ColorG, ColorB); return ColorBG; } #endregion #region 随机产生字符串 /// <summary> /// 随机产生字符串 /// </summary> /// <param name="VCodeLength">要产生的随机字符串长度</param> /// <returns></returns> public string GetVCode(int VCodeLength) { if (VCodeLength <= 0) { return ""; } string VCodeString = "0,1,2,3,4,5,6,7,8,9,a,b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; string[] VCodeStringArray = VCodeString.Split(','); string ReturnValue = ""; int RandomNumber = 0; Random TRandom = new Random(); for (int i = 1; i <= VCodeLength; i++) { RandomNumber = TRandom.Next(VCodeStringArray.Length); ReturnValue += VCodeStringArray[RandomNumber]; } return ReturnValue; } #endregion } |
|