using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Drawing2D;
public partial class ValidateNum : System.Web.UI.Page
{
protected
void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Response.BufferOutput = true; //特别注意
Response.Cache.SetExpires(DateTime.Now.AddMilliseconds(-1));//特别注意
Response.Cache.SetCacheability(HttpCacheability.NoCache);//特别注意
Response.AppendHeader(" Pragma", "No-Cache");
//特别注意
string ValidateNum = CreateRandomNum(4);//生成4位随机数
CreateImage(ValidateNum); //将生成的随机数绘成图片
Session["ValidateNum"]=ValidateNum; //保存验证码
}
}
//生成随机字符串
private
string CreateRandomNum(int NumCount)
{
//所有可能生成的验证码
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 RandomNum="";
int temp=-1;//记录上次随机数的数值,尽量避免产生几个相同的随机数
Random rand = new Random();
for(int i=0;i
{
if(temp!=-1)
{
rand= new Random(i*temp*((int)DateTime.Now.Ticks));
}
int t= rand.Next(35);
if(temp==t)
{
return CreateRandomNum(NumCount);
}
temp=t;
RandomNum=RandomNum+allcharArray[t];
}
return RandomNum;
}
//生成图片
private void
CreateImage(string ValidateNum)
{
if(ValidateNum==null||ValidateNum.Trim()==String.Empty)
return;
System.Drawing.Bitmap image = new
System.Drawing.Bitmap(ValidateNum.Length*12+10,22);
Graphics g = Graphics.FromImage(image);
try
{
Random rand = new Random();
g.Clear(Color.White); //清空图片背景色
//画图片背景噪音线
for(int i=0;i<100;i++)
{
int x1 = rand.Next(image.Width);
int x2 = rand.Next(image.Width);
int y1 = rand.Next(image.Height);
int y2 = rand.Next(image.Height);
g.DrawLine(new Pen(Color.Silver),x1,y1,x2,y2);
}
Font font = new
Font("Arial",12,(FontStyle.Bold|FontStyle.Italic));
LinearGradientBrush brush = new LinearGradientBrush(new
Rectangle(0,0,image.Width,image.Height),Color.Blue,Color.DarkRed,1.2f,true);
g.DrawString(ValidateNum,font,brush,2,2);
//画图片的前景噪音
for(int i=0;i<100;i++)
{
int x=rand.Next(image.Width);
int y=rand.Next(image.Height);
image.SetPixel(x,y,Color.FromArgb(rand.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());
}
catch(Exception e)
{
return;
}
finally
{
g.Dispose();
image.Dispose();
}
}
}
说明:此段代码可单独放在一个页面ValidateNum.aspx中,其生成的验证码供图片标签引用