首页 > ASP.NET技术 > 6步学会ASP.NET自定义验证码+水印控件

6步学会ASP.NET自定义验证码+水印控件

验证码大家应该经常看到吧,比如你在给网站留言,或者注册时就经常可以看到验证码的身影,验证码是很有必要的,因为现在灌水机,信息群发等严重扰乱正常的网站信息管理。
水印应该也都见过吧?它就好比一个我们日常生活中的印章印下的章子。它能够很好的保护发布人的著作权,防止他人盗用。这两个东西如此有用,你想不想知道如何自己动手做呢?想知道就继续看下去吧。
注:需要懂得ASP.NET技术。
1.首先使用VS2005新建一个WEB站点并添加Web用户控件(名为MyCode,语言选择Visual C#)。
2.进入MyCode.ascx文件的设计模式,分别拖入一个Image控件和一个LinkButton控件并将LinkButton控件的

Text属性改为:“我看不清,给我换一张”(你当然可以随便写什么)。
3.双击LinkButton控件进入后置代码中,在该文件中写一个私有的无返回类型的GetCode()方法,其代码如下:

 
  1. private void GetCode()
  2.     {
  3.         //创建验证码位图,宽为500个像素,高为150个像素
  4.         Bitmap myCode = new Bitmap(500, 150);
  5.         //获取位图物理路径
  6.         string codePath = Server.MapPath("~") + "\\code.jpg";
  7.         //创建随机数
  8.         Random rd = new Random();
  9.         //验证码字符串
  10.         string line = "";
  11.         for (int j = 0; j < 6; j++)
  12.         {
  13.             //随即产生大于等于0小于3的数
  14.             int i = rd.Next(3);
  15.             
  16.             if (i == 0)
  17.             {
  18.                 //若为0则生成A-Z的字符并追加到line
  19.                 line += char.ConvertFromUtf32(rd.Next(65, 92));
  20.             }
  21.             else if (i == 1)
  22.             {
  23.                 //若为1则生成a-z的字符串并追加到line
  24.                 line += char.ConvertFromUtf32(rd.Next(97, 123));
  25.             }
  26.             else
  27.             {
  28.                 //其他则生成0-9的数字并追加到line
  29.                 line += rd.Next(10);
  30.             }
  31.         }
  32.         //创建Graphics对象
  33.         Graphics g = Graphics.FromImage(myCode);
  34.         //画上字符串line,且字体随机,大小为90,采用红色实线,从位图的左上角开始画
  35.         g.DrawString(line, new Font(FontFamily.Families[rd.Next(2)], 90), new SolidBrush(Color.Red), 0, 0);
  36.         //给验证码画上10条随机线条加以干扰,黄绿实线,粗度为2,起始位置,终止位置均为不超过位图大小的随机数
  37.         for (int i = 0; i < 10; i++)
  38.         {
  39.             g.DrawLine(new Pen(new SolidBrush(Color.LightGreen), 3), new Point(rd.Next(500), rd.Next(150)), new Point(rd.Next(500), rd.Next(150)));
  40.         }
  41.         //获得水印图片
  42.       &
    nbsp; System.Drawing.Image water = System.Drawing.Image.FromFile(Server.MapPath(
    "~") + "\\water.jpg");
  43.         //将水印画至位图右下角
  44.         g.DrawImage(water, new Point(500-water.Width,150-water.Height));
  45.         //销毁Graphics
  46.         g.Dispose();
  47.         //保存验证码
  48.         myCode.Save(codePath, System.Drawing.Imaging.ImageFormat.Jpeg);
  49.         //销毁位图对象
  50.         myCode.Dispose();
  51.         //显示至网页
  52.         this.Image1.ImageUrl = "code.jpg";
  53.     }

4.在LinkButton1_Click事件中调用GetCode()方法,在Page_Load事件中写入:
if (!IsPostBack)
{
       GetCode();
}
其意是当第一次打开网页的时候调用GetCode()方法。
5.新建一个Web窗体文件TestMyCode.aspx并进入其设计模式,将刚才创建的用户控件MyCode.ascx文件拖入其中


6.运行TestMyCode.aspx文件即可看到如下图中的效果,当单击“我看不清,给我换一张”时便会更换一张新的

验证码。


注:code.jpg为位图文件由编写的代码生成,water.jpg文件为自备水印文件。

转载原创文章请注明,转载自:Neeke’s Blog[http://www.ineeke.cn]

本文链接: http://www.ineeke.cn/archives/AspDotNetZiDingYiYanZhengMaShuiYinKongJian/

  1. 2008年9月30日10:43 | #1

    .NET 的空间真多,学习就是学习控件的使用

    Gravatar头像neeke 于 2008-9-30 18:44:48 回复

    嗯,同意。

    [回复]

  2. 2008年10月16日22:33 | #2

    記下来了,可以扩展哦

    Gravatar头像neeke 于 2008-10-17 0:30:45 回复

    扩展成什么?

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.