ASP.NET验证码控件(附详细用法)

更新时间:2023-10-09 21:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

共享一款ASP.NET验证码控件(附详细用法)

最近在完善我的毕业设计——ASP.NET(C#)实现的三层构架的二手交易系统,觉得有必要加上验证码,这样网站的安全性会提升一些。于是利用百度、谷歌反复搜索,终于找到了一款比较牛叉的验证码控件。原作者不详,这里附上一个地址>>>。程序我做了一些

小小的修改。

按原文所说的操作,根本编译不了

。原文的用法可以查看上面的链接地址,这里我

贴出我自己的用法。我将两个类整合到一个.cs文件中了(这里命名为AuthCode.cs),程

序如下:

using System;

using System.Collections.Generic; using System.ComponentModel;

using System.Text; using System.Web;

using System.Web.UI.WebControls;

using System.Web.UI; using System.Web.SessionState;

using System.Drawing; using System.IO;

namespace AuthCode

{

[ToolboxData(\)]

public class AuthCode : WebControl

{

/// 〈summary> /// 获得验证码的值 /// 〈/summary>

/// 〈returns>验证码〈/returns>

public string GetValue()

{

return HttpContext.Current.Session[\].ToString();

}

[Bindable(true)] [Category(\)] [Description(\验证码字符长度\)]

[DefaultValue(\)] [Localizable(true)]

//长度

internal static int mySize;

public int MySize

{

get { return AuthCode.mySize; }

set {

AuthCode.mySize = value;

} }

public AuthCode()

: base(HtmlTextWriterTag.Img)//重写父类的构造(输出流的HTML标记)

{ }

protected override void AddAttributesToRender(HtmlTextWriter writer)

{

base.AddAttributesToRender(writer);//将要输出的的HTML标签的属性和样式添

加到指定的 HtmlTextWriter中

writer.AddStyleAttribute(HtmlTextWriterStyle.Cursor, \);//添加样式

writer.AddAttribute(\, \);//添加js

VerifyImg.jd

writer.AddAttribute(HtmlTextWriterAttribute.Src, \);

writer.AddAttribute(\, \点击刷新\);

} }

public class AuthCodeHttpHander : IHttpHandler, IRequiresSessionState

{

///

/// 返回验证码字符 ///

///

///

private string GetRandomNumberString(int codeCount)

{

string strChoice =

\;

string[] strResult = strChoice.Split(new Char[] { ',' });

string strReturn = \; Random rnd = new Random(); for (int i = 0; i < codeCount; i++)

{

int j = rnd.Next(strResult.Length);//随机数不能大于数组的长度

strReturn = strReturn + strResult[j].ToString();

}

return strReturn;

}

private Color GetColor()

{

return Color.Black;

}

private Bitmap CreateImage(string str_AuthCode)

{

int width = str_AuthCode.Length * 13;

int height = 20;

Random rad = new Random(); Bitmap bmp = new Bitmap(width, height);

Graphics grp = Graphics.FromImage(bmp);// 在图片上绘制图形

grp.Clear(Color.White);//填充bmp的背景色

grp.DrawRectangle(new Pen(Color.Red, 1), 0, 0, width - 1, height - 1);//绘制边框

int num = width * height;

for (int i = 0; i < num; i+=3)//在图片的指定坐标上画上有颜色的圆点

{

int x = rad.Next(width); int y = rad.Next(height); int r = rad.Next(255); int g = rad.Next(255); int b = rad.Next(255); Color c = Color.FromArgb(r, g, b);

bmp.SetPixel(x, y, c);//在图片的指定坐标上画上有颜色的圆点

}

Font f = new Font(\宋体\, 12, FontStyle.Bold);//定义字体

Brush br = new SolidBrush(Color.Black);//定义画笔的颜色及字体的颜色

for (int i = 0; i < str_AuthCode.Length; i++)

{

string s = str_AuthCode.Substring(i, 1);//单个单个的将字画到图片上 Point p = new Point(i * 12 + rad.Next(3), rad.Next(3) + 1);//字体出现的位置

(坐标)

grp.DrawString(s, f, br, p);//绘制字符串

} grp.Dispose(); return bmp;//返回

}

///

/// 是否可以处理远程的HTTP请求

///

public bool IsReusable

{

get { return true; }

}

///

/// 将验证码图片发送给WEB浏览器

///

///

{

int size = AuthCode.mySize; //Int32.Parse((String)context.Session[\ MemoryStream ms = new MemoryStream(); // 创建内存流(初始长度为0 自动扩

充)

string NumStr = GetRandomNumberString(size);// 获得验证码字符 context.Session.Add(\, NumStr);//将验证码字符保存到session里面

Bitmap theBitmap = CreateImage(NumStr);// 获得验证码图片

theBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);//将位图写入

内存流

context.Response.ClearContent(); //清除缓冲区里的所有内容输出 context.Response.ContentType = \; //需要输出图象信息 要修改

HTTP头

context.Response.BinaryWrite(ms.ToArray()); //将内存流写入HTTP输出流

theBitmap.Dispose(); //释放资源

ms.Close();//释放资源 ms.Dispose();//释放资源 context.Response.End();

} } }

我是这样使用这个验证码控件的:

1:修改web.config 文件

间加入下面的代码:

本文来源:https://www.bwwdw.com/article/iizf.html

Top