《net 实现验证码功能的Web控件.doc》由会员分享,可在线阅读,更多相关《net 实现验证码功能的Web控件.doc(10页珍藏版)》请在金锄头文库上搜索。
1、A 实现验证码功能的Web控件 A的设计方式和设计理念和其他的如Asp,Jsp,Php,Perl等都不一样,几乎是完全的面向对象设计!代码的复用就是其中差异较大的特点之一,A除了可以用Include以外,还提供了比较有特点的Web控件,包括:Ascx形式和带设计时支持的控件本文属于后者,为了熟悉这些新概念,我自己写了个Web控件。 在实际项目中运行使用良好,以后,要有时间,我还将不断改进。 ValidateCode控件的使用方法: 第一步: 编译我提供的原代码, 然后,在S 2003工具栏上, 选择添加/移除项, 选中编译好的dll文件。 第二步: 工具栏上就会多一个Web控件Validate
2、Code,做好一个Web窗体,在S 2003开发界面上,直接把控件拖到WebForm上,就OK! 第三步: 在该控件的GraphicOK事件中获取,验证码的字符信息,用于和用户录入做比较! 最后一步: 在网站的根目录下,建一个temp目录(也可以自己指定目录),用于存放验证码 图片,不用担心,代码会自动删除无用的图片! 原代码如下: using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; using System.IO; using System.Drawi
3、ng; using System.Drawing.Drawing2D; using System.Drawing.Imaging; namespace WebValidateCode / / ValidateCode 的摘要说明。 / 设计者:王海波 2004-11-20 / / public enum GraphicType Jpg = 0, Gif = 1, Png = 2, Bmp = 3, /ToolboxBitmap(D:DotnetAppValidateCodeValidateCode.bmp) /设置控件在工具箱上的图标 public class ValidateCode : S
4、ystem.Web.UI.WebControls.WebControl ,INamingContainer private int pCodelen=5; private int pChartWidth=100; private int pChartHeight=20; private GraphicType pChartType; private string pAuthenCode; private string pTempImageURLPath=/temp; private string pAuthenImageFullname; private string pAuthenImage
5、FullURL; /生成校验码的变量 start private Bitmap validateImage; private Graphics g; /生成校验码的变量 End private TextBox txt=new TextBox(); private System.Web.UI.WebControls.Image img= new System.Web.UI.WebControls.Image(); #region 定义控件事件 public delegate void GraphicCreated(object sender, EventArgs e); public event
6、 EventHandler GraphicOK; /在校验图片生成结束以后触发 protected virtual void OnGraphicOK(object sender, EventArgs e) if (GraphicOK != null) /Invokes the delegates. GraphicOK(sender, e); #endregion #region 控件属性 /生成校验码的长度 Bindable(true),Browsable(true),Category(Appearance),DefaultValue(true),Description(需要验证码的长度,建议
7、在58位之间!) public int CodeLength get return pCodelen; set pCodelen = value; /生成校验码的长度 Bindable(true),Browsable(true),Category(Appearance),DefaultValue(true),Description(生成验证码图片的临时存放路径,要求必须是网站下的虚拟目录!) public string TempImageURLPath get return pTempImageURLPath; set pTempImageURLPath = value; Bindable(t
8、rue),Browsable(true),Category(Appearance),DefaultValue(GraphicType.Jpg),Description(选择生成校验图文件的类型(Jpg;Gif;Png;Bmp)!) public GraphicType ChartType get return pChartType; set pChartType = value; /生成校验码图片的宽度 public int ChartWidth get return pChartWidth; set pChartWidth = value; /生成校验码图片的高度 public int Ch
9、artHeight get return pChartHeight; set pChartHeight = value; /需要生成的校验码 public string AuthenCode get return pAuthenCode; set pAuthenCode = value; #endregion / / 将此控件呈现给指定的输出参数。 / / 要写出到的 HTML 编写器 protected override void Render(HtmlTextWriter output) System.Web.UI.WebControls.Image objImage; /TextBox
10、objTxt; /绘制包含的控件 objImage = (System.Web.UI.WebControls.Image) Controls0; /objTxt = (TextBox) Controls1; if(pAuthenCode=null) pAuthenCode=GetValidateCode(); OnGraphicOK(this,EventArgs.Empty ); GetRandomImage(pAuthenCode); objImage.ImageUrl=pAuthenImageFullURL; objImage.RenderControl(output); / / 给控件添
11、加子控件 / protected override void CreateChildControls( ) /Controls.Add(btn); Controls.Add(img); /Controls.Add(txt); / / 控件Load时候属性的初始化 / / protected override void OnLoad(System.EventArgs e) EraseOldGraphic(); /删除过期的图片 / / 生成随机的 / private void MakeRandomFileName() string strRandName=DateTime.Now.Ticks.T
12、oString()+.jpg; pAuthenImageFullname=this.Page.MapPath(TempImageURLPath)+strRandName; pAuthenImageFullURL=TempImageURLPath+/+strRandName; private void GetRandomImage(string strValidateCode) /生成随即图片的全名,和全URL MakeRandomFileName(); validateImage = new Bitmap(pChartWidth, pChartHeight, PixelFormat.Forma
13、t24bppRgb); / .Format24bppRgb); g = Graphics.FromImage(validateImage); g.Clear(Color.LightGray) ; /g.DrawString(strValidateCode , new Font(宋体,16,FontStyle.Bold),new SolidBrush(Color.DarkRed),new PointF(2,2); for(int i=0;istrValidateCode.Length;i+) Random r = new Random(); PointF startPos=new PointF(r.Next(3,6)+(r.Next(12,14)*i ),r.Next(-1,2) ); g.DrawString(strValidateCode.Substring(i,1) , new Font(宋体,14,FontStyle.Italic),new SolidBrush(Color.Blue),startPos