6步学会ASP.NET自定义验证码+水印控件
验证码大家应该经常看到吧,比如你在给网站留言,或者注册时就经常可以看到验证码的身影,验证码是很有必要的,因为现在灌水机,信息群发等严重扰乱正常的网站信息管理。
水印应该也都见过吧?它就好比一个我们日常生活中的印章印下的章子。它能够很好的保护发布人的著作权,防止他人盗用。这两个东西如此有用,你想不想知道如何自己动手做呢?想知道就继续看下去吧。
注:需要懂得ASP.NET技术。
1.首先使用VS2005新建一个WEB站点并添加Web用户控件(名为MyCode,语言选择Visual C#)。
2.进入MyCode.ascx文件的设计模式,分别拖入一个Image控件和一个LinkButton控件并将LinkButton控件的
Text属性改为:“我看不清,给我换一张”(你当然可以随便写什么)。
3.双击LinkButton控件进入后置代码中,在该文件中写一个私有的无返回类型的GetCode()方法,其代码如下:
- private void GetCode()
- {
- //创建验证码位图,宽为500个像素,高为150个像素
- Bitmap myCode = new Bitmap(500, 150);
- //获取位图物理路径
- string codePath = Server.MapPath("~") + "\\code.jpg";
- //创建随机数
- Random rd = new Random();
- //验证码字符串
- string line = "";
- for (int j = 0; j < 6; j++)
- {
- //随即产生大于等于0小于3的数
- int i = rd.Next(3);
- if (i == 0)
- {
- //若为0则生成A-Z的字符并追加到line
- line += char.ConvertFromUtf32(rd.Next(65, 92));
- }
- else if (i == 1)
- {
- //若为1则生成a-z的字符串并追加到line
- line += char.ConvertFromUtf32(rd.Next(97, 123));
- }
- else
- {
- //其他则生成0-9的数字并追加到line
- line += rd.Next(10);
- }
- }
- //创建Graphics对象
- Graphics g = Graphics.FromImage(myCode);
- //画上字符串line,且字体随机,大小为90,采用红色实线,从位图的左上角开始画
- g.DrawString(line, new Font(FontFamily.Families[rd.Next(2)], 90), new SolidBrush(Color.Red), 0, 0);
- //给验证码画上10条随机线条加以干扰,黄绿实线,粗度为2,起始位置,终止位置均为不超过位图大小的随机数
- for (int i = 0; i < 10; i++)
- {
- 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)));
- }
- //获得水印图片
- &
nbsp; System.Drawing.Image water = System.Drawing.Image.FromFile(Server.MapPath("~") + "\\water.jpg"); - //将水印画至位图右下角
- g.DrawImage(water, new Point(500-water.Width,150-water.Height));
- //销毁Graphics
- g.Dispose();
- //保存验证码
- myCode.Save(codePath, System.Drawing.Imaging.ImageFormat.Jpeg);
- //销毁位图对象
- myCode.Dispose();
- //显示至网页
- this.Image1.ImageUrl = "code.jpg";
- }
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/


















.NET 的空间真多,学习就是学习控件的使用
[回复]
記下来了,可以扩展哦
[回复]