转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
Asp.net 实现验证码功能的Web控件         ★★★★

Asp.net 实现验证码功能的Web控件

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1882 更新时间:2009/4/23 10:43:14

      Asp.net的设计方式和设计理念和其他的如Asp,Jsp,Php,Perl

等都不一样,几乎是完全的面向对象设计!代码的复用就是其

中差异较大的特点之一,Asp.net除了可以用Include以外,还提供

了比较有特点的Web控件,包括:Ascx形式和带设计时支持的控

件[本文属于后者],为了熟悉这些新概念,我自己写了个Web控件。

在实际项目中运行使用良好,以后,要有时间,我还将不断改进。

ValidateCode控件的使用方法:

第一步:

编译我提供的原代码, 然后,在Studio.net 2003工具栏上, 选择"添加/移除项", 选中编译好的dll文件。

第二步:

工具栏上就会多一个Web控件ValidateCode,做好一个Web窗体,在Studio.net 2003开发界面上,直接把控件拖到WebForm上,就OK!

第三步:

在该控件的GraphicOK事件中获取,验证码的字符信息,用于和用户录入做比较!

最后一步:

在网站的根目录下,建一个temp目录(也可以自己指定目录),用于存放验证码

图片,不用担心,代码会自动删除无用的图片!

原代码如下:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace WebValidateCode
{
 /// <summary>
 /// ValidateCode 的摘要说明。
 /// 设计者:王海波 2004-11-20
 /// </summary>
 ///
 public enum GraphicType
 {
  Jpg = 0,
  Gif = 1,
  Png = 2,
  Bmp = 3,
 }

 
 //[ToolboxBitmap(@"D:\DotnetApp\ValidateCode\ValidateCode.bmp") ] //设置控件在工具箱上的图标
 public class ValidateCode : System.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 pAuthenImageFullURL;
  
  //生成校验码的变量 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 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("需要验证码的长度,建议在5~8位之间!")]
  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(true),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 ChartHeight
  {
   get
   {
    return pChartHeight;
   }

   set
   {
    pChartHeight = value;
   }
  }

  //需要生成的校验码
  public string AuthenCode
  {
   get
   {
    return pAuthenCode;
   }

   set
   {
    pAuthenCode = value;
   }
  }

  #endregion

  /// <summary>
  /// 将此控件呈现给指定的输出参数。
  /// </summary>
  /// <param name="output"> 要写出到的 HTML 编写器 </param>
  protected override void Render(HtmlTextWriter output)
  {
        
   System.Web.UI.WebControls.Image objImage;
         //TextBox objTxt;
    
    
   //绘制包含的控件   
   objImage  = (System.Web.UI.WebControls.Image) Controls[0]; 
   //objTxt  = (TextBox) Controls[1];     
   
   if(pAuthenCode==null)
      pAuthenCode=GetValidateCode();
             
   OnGraphicOK(this,EventArgs.Empty );
   
   GetRandomImage(pAuthenCode);
   objImage.ImageUrl=pAuthenImageFullURL;

   objImage.RenderControl(output); 
                
  }

  /// <summary>
  /// 给控件添加子控件
  /// </summary>
  protected  override  void  CreateChildControls(    )
  {
   
   //Controls.Add(btn);
   Controls.Add(img);
   //Controls.Add(txt);
  }

  /// <summary>
  /// 控件Load时候属性的初始化
  /// </summary>
  /// <param name="e"></param>
  protected  override  void OnLoad(System.EventArgs e)
  {
      EraseOldGraphic();   //删除过期的图片
  }

  /// <summary>
  /// 生成随机的
  /// </summary>
  private void MakeRandomFileName()
  {
   string strRandName=DateTime.Now.Ticks.ToString()+".jpg";  
   pAuthenImageFullname=this.Page.MapPath(TempImageURLPath)+@"\"+strRandName;
   pAuthenImageFullURL=TempImageURLPath+"/"+strRandName;
  }


  private void GetRandomImage(string strValidateCode)
  {   
   //生成随即图片的全名,和全URL
   MakeRandomFileName();

   validateImage = new Bitmap(pChartWidth, pChartHeight, PixelFormat.Format24bppRgb); // .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;i<strValidateCode.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);
   }

   
   //g.FillRectangle(new LinearGradientBrush(new Point(0,0), new Point

[1] [2]  下一页


[C语言系列]NET 中C#的switch语句的语法  [聊天工具]Gmail推出新功能:Web Clip__天极Yesky
[聊天工具]Web MSN你玩了吗__天极Yesky  [系统软件]托拽Explore中的文件到VB.net的窗口
[系统软件]Web Browser Express 概述  [系统软件]对Internet Explorer Web 控件做一点修改
[系统软件]Boost库在XP+Visual C++.net中的安装  [常用软件]小技巧:三步实现Web迅雷录制PPLive节目
[常用软件]新配色面板:Paint.Net3.0RC1官方下载  [常用软件]天网防火墙:打开WEB和FTP服务
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台