生成验证码的一段源代码

在页面中生成验证码的代码:

 

private void Page_Load(object sender, System.EventArgs e)
  {
   
string checkCode = GetRandomCode(4);
   Session[
"CheckCode"= checkCode;
   SetPageNoCache();
   CreateImage(checkCode);
  }

  
/// <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");
  }



private string GetRandomCode(int CodeCount) 
  {
            
string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,i,J,K,M,N,P,Q,R,S,T,U,W,X,Y,Z";
   
string[] allCharArray = allChar.Split(','); 
   
string RandomCode = ""
   
int temp = -1

   Random rand 
= new Random(); 
   
for (int i=0;i<CodeCount;i++
   { 
    
if (temp != -1
    { 
     rand 
= new Random(temp*i*((int) DateTime.Now.Ticks)); 
    } 

    
int t = rand.Next(33); 

    
while (temp == t) 
    { 
     t 
= rand.Next(33); 
    } 
  
    temp 
= t; 
    RandomCode 
+= allCharArray[t]; 
   } 

   
return RandomCode; 
  }
  
private void CreateImage(string checkCode)
  {
   
int iwidth = (int)(checkCode.Length * 14);
   System.Drawing.Bitmap image 
= new System.Drawing.Bitmap(iwidth, 20);
   Graphics g 
= Graphics.FromImage(image);
   Font f 
= new System.Drawing.Font("Arial "10);//, System.Drawing.FontStyle.Bold);
   Brush b = new System.Drawing.SolidBrush(Color.Black);
            Brush r 
= new System.Drawing.SolidBrush(Color.FromArgb(166,8,8));
   
   
//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
//   g.Clear(Color.AliceBlue);//背景色
   g.Clear(System.Drawing.ColorTranslator.FromHtml("#99C1CB"));//背景色

            
char[] ch = checkCode.ToCharArray();
            
for (int i = 0; i < ch.Length; i++ )
            {
                
if(ch[i] >= '0' && ch[i] <= '9')
                {
                    
//数字用红色显示
                    g.DrawString(ch[i].ToString(), f, r, 3 + (i * 12),3);
                }
                
else
                {   
//字母用黑色显示
                    g.DrawString(ch[i].ToString(), f, b, 3 + (i * 12),3);
                }
            }            
   System.IO.MemoryStream ms 
= new System.IO.MemoryStream();
   image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
   
//history back 不重复 
   Response.Cache.SetNoStore();//这一句   
   Response.ClearContent();
   Response.ContentType 
= "image/Jpeg";
   Response.BinaryWrite(ms.ToArray());
   g.Dispose();
   image.Dispose();
  }

调用的时候设置imageurl='...aspx'就可以了。

 

posted @ 2009-02-25 16:33  Qubook  阅读(396)  评论(0编辑  收藏  举报