ASP.net 验证码(C#)
/* Copyright all(c) 2005 ZhongFeng, http://blog.csdn.net/SW515 */
?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;
???}
????????/***** ?其他代碼? *****/
??}
效果圖:
?
你可以使用或部分引用該段代碼,不過必須保留以上版權注釋部分內容,并注釋代碼來源,否則將保留追究侵權的權利!
?總結
以上是生活随笔為你收集整理的ASP.net 验证码(C#)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.net 不使用SQLDMO实现数
- 下一篇: 在c#中调用windows脚本的方法