手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >asp.net 验证码生成和刷新及验证
asp.net 验证码生成和刷新及验证
摘要:验证码技术是为了防止暴力破解等而设定的。现在一般的网站注册等都提供验证码功能,特别是腾讯更是长长的一串。文中参考了别人的代码。有了就没有必要...

验证码技术是为了防止暴力破解等而设定的。现在一般的网站注册等都提供验证码功能,特别是腾讯更是长长的一串。文中参考了别人的代码。有了就没有必要再写了。可以读一下。不过我测试时发现了两次PageLoad的问题。注释了两句即可。同时修改了namespaces。同时提供完整的验证说明:

1 新建VerifyCode.aspx

cs文件代码如下:

复制代码 代码如下:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Drawing;

using System.Drawing.Imaging;

using System.Drawing.Text;

/**///// <summary>

/// 页面验证码程序

/// 使用:在页面中加入HTML代码 <img src="VerifyCode.aspx">

/// </summary>

public partial class VerifyCode : System.Web.UI.Page

...{

static string[] FontItems = new string[] ...{ "Arial",

"Helvetica",

"Geneva",

"sans-serif",

"Verdana"

};

static Brush[] BrushItems = new Brush[] ...{ Brushes.OliveDrab,

Brushes.ForestGreen,

Brushes.DarkCyan,

Brushes.LightSlateGray,

Brushes.RoyalBlue,

Brushes.SlateBlue,

Brushes.DarkViolet,

Brushes.MediumVioletRed,

Brushes.IndianRed,

Brushes.Firebrick,

Brushes.Chocolate,

Brushes.Peru,

Brushes.Goldenrod

};

static string[] BrushName = new string[] ...{ "OliveDrab",

"ForestGreen",

"DarkCyan",

"LightSlateGray",

"RoyalBlue",

"SlateBlue",

"DarkViolet",

"MediumVioletRed",

"IndianRed",

"Firebrick",

"Chocolate",

"Peru",

"Goldenrod"

};

private static Color BackColor = Color.White;

private static Pen BorderColor = Pens.DarkGray;

private static int Width = 52;

private static int Height = 21;

private Random _random;

private string _code;

private int _brushNameIndex;

override protected void OnInit(EventArgs e)

...{

//

// CODEGEN: This call is required by the ASP.NET Web Form Designer.

//

//InitializeComponent();

//base.OnInit(e);

}

/**//**//**//// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

...{

//this.Load += new System.EventHandler(this.Page_Load);

}

/**//// <summary>

///

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

public void Page_Load(object sender, System.EventArgs e)

...{

if (!IsPostBack)

...{

//

// TODO : initialize

//

this._random = new Random();

this._code = GetRandomCode();

//

// TODO : use Session["code"] save the VerifyCode

//

Session["code"] = this._code;

//

// TODO : output Image

//

this.SetPageNoCache();

this.OnPaint();

}

}

/**//**//**//// <summary>

/// 设置页面不被缓存

/// </summary>

private void SetPageNoCache()

...{

Response.Buffer = true;

Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);

Response.Expires = 0;

Response.CacheControl = "no-cache";

Response.AppendHeader("Pragma","No-Cache");

}

/**//**//**//// <summary>

/// 取得一个 4 位的随机码

/// </summary>

/// <returns></returns>

private string GetRandomCode()

...{

return Guid.NewGuid().ToString().Substring(0, 4);

}

/**//**//**//// <summary>

/// 随机取一个字体

/// </summary>

/// <returns></returns>

private Font GetFont()

...{

int fontIndex = _random.Next(0, FontItems.Length);

FontStyle fontStyle = GetFontStyle(_random.Next(0, 2));

return new Font(FontItems[fontIndex], 12, fontStyle);

}

/**//**//**//// <summary>

/// 取一个字体的样式

/// </summary>

/// <param name="index"></param>

/// <returns></returns>

private FontStyle GetFontStyle(int index)

...{

switch (index)

...{

case 0:

return FontStyle.Bold;

case 1:

return FontStyle.Italic;

default:

return FontStyle.Regular;

}

}

/**//**//**//// <summary>

/// 随机取一个笔刷

/// </summary>

/// <returns></returns>

private Brush GetBrush()

...{

int brushIndex = _random.Next(0, BrushItems.Length);

_brushNameIndex = brushIndex;

return BrushItems[brushIndex];

}

/**//**//**//// <summary>

/// 绘画事件

/// </summary>

private void OnPaint()

...{

Bitmap objBitmap = null;

Graphics g = null;

try

...{

objBitmap = new Bitmap(Width, Height);

g = Graphics.FromImage(objBitmap);

Paint_Background(g);

Paint_Text(g);

Paint_TextStain(objBitmap);

Paint_Border(g);

objBitmap.Save(Response.OutputStream, ImageFormat.Gif);

Response.ContentType = "image/gif";

}

catch ...{}

finally

...{

if (null != objBitmap)

objBitmap.Dispose();

if (null != g)

g.Dispose();

}

}

/**//**//**//// <summary>

/// 绘画背景颜色

/// </summary>

/// <param name="g"></param>

private void Paint_Background(Graphics g)

...{

g.Clear(BackColor);

}

/**//**//**//// <summary>

/// 绘画边框

/// </summary>

/// <param name="g"></param>

private void Paint_Border(Graphics g)

...{

g.DrawRectangle(BorderColor, 0, 0, Width - 1, Height - 1);

}

/**//**//**//// <summary>

/// 绘画文字

/// </summary>

/// <param name="g"></param>

private void Paint_Text(Graphics g)

...{

g.DrawString(_code, GetFont(), GetBrush(), 3, 1);

}

/**//**//**//// <summary>

/// 绘画文字噪音点

/// </summary>

/// <param name="g"></param>

private void Paint_TextStain(Bitmap b)

...{

for (int n=0; n<30; n++)

...{

int x = _random.Next(Width);

int y = _random.Next(Height);

b.SetPixel(x, y, Color.FromName(BrushName[_brushNameIndex]));

}

}

}

2 页面引用:

<asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" />

一般需要同时提供刷新功能(看不清楚换一张),代码如下

<asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" /><A href="javascript:getimgcode()">刷新验证码</A>

如使用了母版页,则用如下代码:

<img ID="getcode" alt="" src="VerifyCode.aspx" /><%--<asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" />--%>

<A href="javascript:getimgcode()">刷新验证码</A>

超链接对应的javascript如下:

<script language="javascript" type="text/javascript">

function getimgcode()

{

var getimagecode = document.getElementById("getcode");

getimagecode.src = "VerifyCode.aspx";

}

</script>

3 判断验证

上述代码是将验证码存贮在Session中,用code来标志。读取代码Session["code"].ToString();

使用中,我们只需要比较Session["code"].ToString()和文本框输入的串(TextBoxCode.Text)是否相同即可进行判断。

if(Session["code"].ToString().Trim().Equals(TextBoxCode.Text.Trim()))

...{

Response.Write("Success");

}

测试通过!

【asp.net 验证码生成和刷新及验证】相关文章:

asp.net验证一个字符串是否符合指定的正则表达式

c# .net 生成图片验证码的代码

asp.net下百度的编码和解码

asp.net 生成数字和字母组合的随机数

asp.net图片上传生成缩略图的注意事项

asp.net 简易生成注册码(数字+大小写字母)

asp.net刷新本页面的六种方法

asp.net替换和恢复html特殊字符

asp.net GridView的删除对话框的两种方法

asp.net2.0实现邮件发送(测试成功)

精品推荐
分类导航