c# 验证码问题

来源:互联网 发布:算法技术手册 高清pdf 编辑:程序博客网 时间:2024/05/12 18:11
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;

public partial class ValidateCode : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        
if (!IsPostBack)
        
{

            
string checkCode = CreateRandomCode(4);
            Session[
"CheckCode"= checkCode;
            CreateImage(checkCode);
        }

       
    }



private string CreateRandomCode (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,L,M,N,O,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((i*temp*(int)DateTime.Now.Ticks)); 
}
 
int t = rand.Next (35); 
if (temp == t) 

return CreateRandomCode(codeCount); 
}
 
temp 
= t; 
randomCode 
+= allCharArray[t]; 
}
 
return randomCode; 

}



    
private void CreateImage(string checkCode)
    
{
        
int iwidth = (int)(checkCode.Length * 15.5*2);
        System.Drawing.Bitmap image 
= new System.Drawing.Bitmap(iwidth, 50);
        Graphics g 
=  Graphics.FromImage(image);
        Font f 
= new System.Drawing.Font("Arial"30, System.Drawing.FontStyle.Bold);
        Brush b 
= new System.Drawing.SolidBrush(Color.White);
        
//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
        g.Clear(Color.Blue);
        g.DrawString(checkCode, f, b, 
33);

        Pen blackPen 
= new Pen(Color.Black, 0);
        Random rand 
= new Random();
        
for (int i = 0; i < 5; i++)
        
{
            
int y = rand.Next(image.Height);
            g.DrawLine(blackPen, 
0, y, image.Width, y);
        }


        System.IO.MemoryStream ms 
= new System.IO.MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        Response.ClearContent();
        Response.ContentType 
= "image/Jpeg";
        Response.BinaryWrite(ms.ToArray());
        g.Dispose();
        image.Dispose();
    }






}








 我保存到seesion中的值 与显示的值不一样 ,始终都比图片上的值慢了一个 这是为什么呢?