ASP.net中随机数应用实例(随机生成图片)
< %@ Page Language="C#" Debug="true" Trace="false" TraceMode="SortByCategory"% >< % @Import namespace="System.Drawing" % >< % @Import namespace="System.Drawing.Imaging" % >< % @Import namespace="System.Drawing.Text" % >< % @Import namespace="System.IO" % >< script language=C# runat=server >
public void Page_Load(object sender,EventArgs e){ string strNum=GetRandomString();
string strFontName;
int iFontSize;
int iWidth;
int iHeight;
strFontName="宋体";
iFontSize=12;
iWidth=10*strNum.Length;
iHeight=25;
Color bgColor=Color.Yellow;
Color foreColor=Color.Red;
Font foreFont=new Font(strFontName,iFontSize,FontStyle.Bold);
Bitmap Pic=new Bitmap(iWidth,iHeight,PixelFormat.Format32bppArgb);
Graphics g=Graphics.FromImage(Pic);
Rectangle r=new Rectangle(0,0,iWidth,iHeight);
g.FillRectangle(new SolidBrush(bgColor),r);
g.DrawString(strNum,foreFont,new SolidBrush(foreColor),2,2);
MemoryStream mStream=new MemoryStream();
Pic.Save(mStream,ImageFormat.Gif);
g.Dispose();
Pic.Dispose();
Response.ClearContent();
Response.ContentType="image/GIF";
Response.BinaryWrite(mStream.ToArray());
Response.End();
}
private int []GetRandomArray(int Length,int Up,int Down)
{
int iFirst=0;
int []rtArray=new Int32[Length];
Random ro=new Random(Length*unchecked((int)DateTime.Now.Ticks));
iFirst=ro.Next(Up,Down);
rtArray[0]=iFirst;
for(int i=1;i< Length;i++)
{
Random ri=new Random(i*iFirst*unchecked((int)DateTime.Now.Ticks));
rtArray[i]=ri.Next(Up,Down);
iFirst=rtArray[i];
}
return rtArray;
}
最后我们可以编写一个普通的HTML页面来查看效果,只要把图片的src属性指向这个页面就行了(这里我们假设上面那个ASP.net文件的名字是“RandomPic.aspx”):
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
< HTML >
< HEAD >
< TITLE > New Document < /TITLE >
< META NAME="Generator" CONTENT="EditPlus" >
< META NAME="Author" CONTENT="" >
< META NAME="Keywords" CONTENT="" >
< META NAME="Description" CONTENT="" >
< /HEAD >
< BODY >
< img src="RandomPic.aspx" >
< /BODY >
< /HTML >
在笔者的机器上成功地看到了如下结果:

要实现像Chinaren网站那样的防恶意攻击的效果,只需要在留言簿的页面里产生随机数并且编写相应的JavaScript验证代码(事实上这个工作可以交给ASP.net的验证控件很容易地完成),然后传递到生成图片的页面里生成图片提示用户就可以了。
public void Page_Load(object sender,EventArgs e){ string strNum=GetRandomString();
string strFontName;
int iFontSize;
int iWidth;
int iHeight;
strFontName="宋体";
iFontSize=12;
iWidth=10*strNum.Length;
iHeight=25;
Color bgColor=Color.Yellow;
Color foreColor=Color.Red;
Font foreFont=new Font(strFontName,iFontSize,FontStyle.Bold);
Bitmap Pic=new Bitmap(iWidth,iHeight,PixelFormat.Format32bppArgb);
Graphics g=Graphics.FromImage(Pic);
Rectangle r=new Rectangle(0,0,iWidth,iHeight);
g.FillRectangle(new SolidBrush(bgColor),r);
g.DrawString(strNum,foreFont,new SolidBrush(foreColor),2,2);
MemoryStream mStream=new MemoryStream();
Pic.Save(mStream,ImageFormat.Gif);
g.Dispose();
Pic.Dispose();
Response.ClearContent();
Response.ContentType="image/GIF";
Response.BinaryWrite(mStream.ToArray());
Response.End();
}
private int []GetRandomArray(int Length,int Up,int Down)
{
int iFirst=0;
int []rtArray=new Int32[Length];
Random ro=new Random(Length*unchecked((int)DateTime.Now.Ticks));
iFirst=ro.Next(Up,Down);
rtArray[0]=iFirst;
for(int i=1;i< Length;i++)
{
Random ri=new Random(i*iFirst*unchecked((int)DateTime.Now.Ticks));
rtArray[i]=ri.Next(Up,Down);
iFirst=rtArray[i];
}
return rtArray;
}
最后我们可以编写一个普通的HTML页面来查看效果,只要把图片的src属性指向这个页面就行了(这里我们假设上面那个ASP.net文件的名字是“RandomPic.aspx”):
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
< HTML >
< HEAD >
< TITLE > New Document < /TITLE >
< META NAME="Generator" CONTENT="EditPlus" >
< META NAME="Author" CONTENT="" >
< META NAME="Keywords" CONTENT="" >
< META NAME="Description" CONTENT="" >
< /HEAD >
< BODY >
< img src="RandomPic.aspx" >
< /BODY >
< /HTML >
在笔者的机器上成功地看到了如下结果:

要实现像Chinaren网站那样的防恶意攻击的效果,只需要在留言簿的页面里产生随机数并且编写相应的JavaScript验证代码(事实上这个工作可以交给ASP.net的验证控件很容易地完成),然后传递到生成图片的页面里生成图片提示用户就可以了。
浙公网安备 33010602011771号