using System;
using Syste
m.Collections;
using Syste
m.ComponentModel;
using Syste
m.Data;
using Syste
m.Web;
using Syste
m.Web.SessionState;
using Syste
m.Web.UI;
using Syste
m.Web.UI.WebControls;
using Syste
m.Web.UI.HtmlControls;
using Syste
m.Drawing;
using Syste
m.Drawing.Imaging;
using Syste
m.Drawing.Text;
/
**///// <sum
Mary>
/// 页面验证码程序
/// 使用:在页面中加入HTML代码 <img src="VerifyCode.aspx">
/// </sum
Mary>
public partial class VerifyCode : Syste
m.Web.UI.Page
...
{ static
String[] FontItems =
new String[] ...
{ "Arial",
"
Helvetica",
"Geneva",
"sans-serif",
"Verdana"
};
static Brush[] BrushItems = new Brush[] ...
{ Brushe
s.OliveDrab,
Brushe
s.ForestGreen,
Brushe
s.DarkCyan,
Brushe
s.LightSlateGray,
Brushe
s.RoyalBlue,
Brushe
s.SlateBlue,
Brushe
s.DarkViolet,
Brushe
s.MediumVioletRed,
Brushe
s.IndianRed,
Brushe
s.Firebrick,
Brushe
s.Chocolate,
Brushe
s.Peru,
Brushe
s.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 = Pen
s.DarkGray;
private stati
c int Width = 52;
private stati
c int Height = 21;
private Random _random;
private
String _code;
privat
E int _brushNameIndex;
override protected void OnInit(EventArgs
E) ...
{ //
// CODEGEN: This call is
required by the ASP.NET Web Form Designer.
//
//InitializeComponent(
); //base
.onInit(
E);
}
/
**//
**//
**//// <sum
Mary>
///
required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </sum
Mary>
private void InitializeComponent()
...
{ //thi
s.Load += new Syste
m.EventHandler(thi
s.Page_Load
); }
/
**//// <sum
Mary>
///
/// </sum
Mary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void Page_Load(ob
ject sender,Syste
m.EventArgs
E) ...
{ if (!IsPost
BACk)
...
{ //
// TODO : initialize
//
thi
s._random = new Random(
); thi
s._code = GetRandomCode(
); //
// TODO : use Session["code"] save the VerifyCode
//
Session["code"] = thi
s._code;
//
// TODO : output Image
//
thi
s.SetPageNoCache(
); thi
s.OnPaint(
); }
}
/
**//
**//
**//// <sum
Mary>
/// 设置页面不被缓存
/// </sum
Mary>
private void SetPageNoCache()
...
{ Response
.buffer = true;
Response.ExpiresAbsolute = Syste
m.datetiR_146_11845@e.Now.AddSeconds(-1
); Response.Expires = 0;
Response.Ca
checontrol = "no-cache";
Response.AppendHeader("Pragma","No-Cache"
); }
/
**//
**//
**//// <sum
Mary>
/// 取得一个 4 位的随机码
/// </sum
Mary>
/// <returns></returns>
private
String GetRandomCode()
...
{ return Guid.NewGuid().To
String().Sub
String(0,4
); }
/
**//
**//
**//// <sum
Mary>
/// 随机取一个字体
/// </sum
Mary>
/// <returns></returns>
private Font GetFont()
...
{ int fon
Tindex = _rando
m.Next(0,FontItem
s.Length
); FontStyle fontStyle = GetFontStyle(_rando
m.Next(0,2)
); return new Font(FontItems[fon
Tindex],12,fontStyl
E);
}
/
**//
**//
**//// <sum
Mary>
/// 取一个字体的样式
/// </sum
Mary>
/// <param name="index"></param>
/// <returns></returns>
private FontStyle GetFontStyle(int inde
X) ...
{ switch (inde
X) ...
{ case 0:
return FontStyle
.bold;
case 1:
return FontStyle.Itali
c; default:
return FontStyle.Regular;
}
}
/
**//
**//
**//// <sum
Mary>
/// 随机取一个笔刷
/// </sum
Mary>
/// <returns></returns>
private Brush GetBrush()
...
{ int brushIndex = _rando
m.Next(0,BrushItem
s.Length
); _brushNameIndex = brushIndex;
return BrushItems[brushIndex];
}
/
**//
**//
**//// <sum
Mary>
/// 绘画事件
/// </sum
Mary>
private void OnPaint()
...
{ Bitmap objBitmap = null;
Graphics g = null;
try
...
{ objBitmap = new Bitmap(Width,Height
); g = Graphic
s.FromImage(objBitma
p);
Pain
T_Backg@R_
607_7060@g
); Paint_Text(g
); Paint_TextStain(objBitma
p);
Pain
T_Border(g
); objBitmap.Save(Response
.outputStream,ImageFormat.Gif
); Response.ContentType = "image/gif";
}
catch ...
{}
finally
...
{ if (null
!= objBitma
p) objBitmap.Dispose(
); if (null
!= g)
g.Dispose(
); }
}
/
**//
**//
**//// <sum
Mary>
/// 绘画背景颜色
/// </sum
Mary>
/// <param name="g"></param>
private void Pain
T_Backg@R_
607_7060@Graphics g)
...
{ g.Clear(
BACkColor
); }
/
**//
**//
**//// <sum
Mary>
/// 绘画边框
/// </sum
Mary>
/// <param name="g"></param>
private void Pain
T_Border(Graphics g)
...
{ g.DrawRectangle(BorderColor,Width - 1,Height - 1
); }
/
**//
**//
**//// <sum
Mary>
/// 绘画文字
/// </sum
Mary>
/// <param name="g"></param>
private void Paint_Text(Graphics g)
...
{ g.Draw
String(_code,GetFont(),GetBrush(),3,1
); }
/
**//
**//
**//// <sum
Mary>
/// 绘画文字噪音点
/// </sum
Mary>
/// <param name="g"></param>
private void Paint_TextStain(Bitmap b)
...
{ for (
int n=0; n<30; n++)
...
{ int x = _rando
m.Next(Width
); int y = _rando
m.Next(Height
); b.SetPixel(x,y,Color.Fro
mname(BrushName[_brushNameIndex])
); }
}
}
<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" />--%>
...