網站驗證碼製做

asp.net驗證碼製做
緩存

using System;session

using System.IO;asp.net

using System.Drawing;dom

using System.Drawing.Imaging;ide

using System.Text;字體

using System.Collections;spa

using System.Web;.net

using System.Web.UI;orm

using System.Web.UI.WebControls;對象

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls; 


namespace WebApplication1

{

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

    {

        protected void Page_Load(object sender, EventArgs e) 

string chkCode = string.Empty; 

//顏色列表,用於驗證碼、噪線、噪點 

Color[] color ={ Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue }; 

//字體列表,用於驗證碼 

string[] font ={ "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" }; 

//驗證碼的字符集,去掉了一些容易混淆的字符 

char[] character ={ '2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' }; 

Random rnd = new Random(); 

//生成驗證碼字符串 

for (int i = 0; i < 4; i++) 

chkCode += character[rnd.Next(character.Length)]; 

}

//用session對象存儲驗證碼

Session["name"] = chkCode;

Bitmap bmp = new Bitmap(100, 40); 

Graphics g = Graphics.FromImage(bmp); 

g.Clear(Color.White); 

//畫噪線 

for (int i = 0; i < 10; i++) 

int x1 = rnd.Next(100); 

int y1 = rnd.Next(40); 

int x2 = rnd.Next(100); 

int y2 = rnd.Next(40); 

Color clr = color[rnd.Next(color.Length)]; 

g.DrawLine(new Pen(clr), x1, y1, x2, y2); 

//畫驗證碼字符串 

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

string fnt = font[rnd.Next(font.Length)]; 

Font ft = new Font(fnt, 18); 

Color clr = color[rnd.Next(color.Length)]; 

g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 20 + 8, (float)8); 

//畫噪點 

for (int i = 0; i < 100; i++) 

int x = rnd.Next(bmp.Width); 

int y = rnd.Next(bmp.Height); 

Color clr = color[rnd.Next(color.Length)]; 

bmp.SetPixel(x, y, clr); 

//清除該頁輸出緩存,設置該頁無緩存 

Response.Buffer = true; 

Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); 

Response.Expires = 0; 

Response.CacheControl = "no-cache"; 

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

//將驗證碼圖片寫入內存流,並將其以 "p_w_picpath/Png" 格式輸出 

MemoryStream ms = new MemoryStream(); 

try 

bmp.Save(ms, ImageFormat.Png); 

Response.ClearContent(); 

Response.ContentType = "p_w_picpath/Png"; 

Response.BinaryWrite(ms.ToArray()); 

finally 

//顯式釋放資源 

bmp.Dispose(); 

g.Dispose(); 

    }

}

相關文章
相關標籤/搜索