public class ValidateCode : System.Web.UI.Page
{
private void Page_Load( object sender, System.EventArgs e )
{
this.CreateCheckCodeImage( GenerateCheckCode( ) );
}
#region Web 窗體設計器生成的代碼 override
protected void OnInit( EventArgs e )
{
//
// CODEGEN: 該調用是 asp.NET Web 窗體設計器所必需的.
//
InitializeComponent( );
base.OnInit( e );
}
/// <summary>
/// 設計器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內容.
/// </summary>
private void
InitializeComponent( )
{
this.Load += new System.EventHandler( this.Page_Load );
}
#endregion
private
string GenerateCheckCode( )
{
int number;
char code;
string checkCode = String.Empty;
System.Random random = new Random( );
for( int i=0;i<5;i++ )
{
number = random.Next( );
if( number % 2 == 0 )
code = ( char )( '0' + ( char )( number % 10 ) );
else
code = ( char )( 'A' + ( char )( number % 26 ) );
checkCode += code.ToString( );
}
Response.Cookies.Add( new HttpCookie( "CheckCode", checkCode ) );
return checkCode;
}
private void CreateCheckCodeImage( string checkCode )
{
if( checkCode == null || checkCode.Trim( ) == String.Empty )
return;
System.Drawing.Bitmap image = new System.Drawing.Bitmap( ( int )Math.Ceiling( ( checkCode.Length * 12.5 ) ), 22 );
Graphics g = Graphics.FromImage( image );
try
{
//生成隨機生成器
Random random = new Random( );
//清空圖片背景色
g.Clear( Color.White );
//畫圖片的背景噪音線
for( int i=0;i<25;i++ )
{
int x1 = random.Next( image.Width );
int x2 = random.Next( image.Width );
int y1 = random.Next( image.Height );
int y2 = random.Next( image.Height );
g.DrawLine( new Pen( Color.Silver ), x1, y1, x2, y2 );
}
Font font = new System.Drawing.Font( "Arial", 12, ( System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic ) );
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush( new Rectangle( 0, 0, image.Width, image.Height ), Color.Blue, Color.DarkRed, 1.2f, true );
g.DrawString( checkCode, font, brush, 2, 2 );
//畫圖片的前景噪音點
for( int i=0;i<100;i++ )
{
int x = random.Next( image.Width );
int y = random.Next( image.Height );
image.SetPixel( x, y, Color.FromArgb( random.Next( ) ) );
}
//畫圖片的邊框線
g.DrawRectangle( new Pen( Color.Silver ), 0, 0, image.Width - 1, image.Height - 1 );
System.IO.MemoryStream ms = new System.IO.MemoryStream( );
image.Save( ms, System.Drawing.Imaging.ImageFormat.Gif );
Response.ClearContent( );
Response.ContentType = "image/Gif";
Response.BinaryWrite( ms.ToArray( ) );
}
finally
{
g.Dispose( );
image.Dispose( );
}
}
}
假如以上驗證碼生成器頁面名為:CheckCode.aspx,那麼在登錄頁面中使用“<IMG>” 這個 HTML 元素來顯示生成的驗證碼圖片:<IMG src="CheckCode.aspx">
在登錄頁面的登錄按鈕的處理事件中使用以下代碼判斷驗證碼:private void btnLogin_Click( object sender, System.Web.UI.ImageClickEventArgs e )
/******其他代碼******/
{
if( Request.Cookies["CheckCode"] == null )
{
lblMessage.Text = "您的浏覽器設置已被禁用 Cookies,您必須設置浏覽器允許使用 Cookies 選項後才能使用本系統.";
lblMessage.Visible = true;
return;
}
if( String.Compare( Request.Cookies["CheckCode"].Value, txtCheckCode.Text, true ) != 0 )
{
lblMessage.Text = "驗證碼錯誤,請輸入正確的驗證碼.";
lblMessage.Visible = true;
return;
}