新建一个页面image.aspx,添加命名空间:
using System.Drawing.Imaging;
using System.IO;
然后在Page_load事件拷入如下代码:
string tmp = RndNum( 4 );
HttpCookie a = new HttpCookie( "ImageV",tmp );
Response.Cookies.Add( a );
this.ValidateCode( tmp );
接下来向该页面添加两个方法:
private void ValidateCode( string VNum )
{
Bitmap Img=null;
Graphics g=null;
MemoryStream ms=null;
int gheight=VNum.Length*12;
Img=new Bitmap( gheight,25 );
g=Graphics.FromImage( Img );
g.Clear( Color.White );
Font f=new Font( "Arial Black",10 );
SolidBrush s=new SolidBrush( Color.Black );
g.DrawString( VNum,f,s,3,3 );
ms=new MemoryStream( );
Img.Save( ms,ImageFormat.Jpeg );
Response.ClearContent( );
Response.ContentType="image/Jpeg";
Response.BinaryWrite( ms.ToArray( ) );
g.Dispose( );
Img.Dispose( );
Response.End( );
}
private
string RndNum( int VcodeNum )
{
string V
char="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,v,w,x,y,z";
string[] VcArray=V
char.Split( new Char []
{
','
}
);
string VNum="";
int temp=-1;
Random rand=new Random( );
for( int i=1;
i<VcodeNum+1;
i++ )
{
if( temp!=-1 )
{
rand=new Random( i*temp*unchecked( ( int )DateTime.Now.Ticks ) );
}
int t=rand.Next( 35 );
if( temp!=-1&&temp==t )
{
return RndNum( VcodeNum );
}
temp=t;
VNum+=VcArray[t];
}
return VNum;
}
如果要在页面a.aspx生成验证码,则在该页面添加一个图片控件,假设命名为:ImageButton1,然后在page_Load事件中写如下代码:
ImageButton1.ImageUrl = "image.aspx";
这样就可以生成验证码了,image.aspx页面可以随便放在哪里,不过要注意ImageButton1.ImageUrl 要写对,同级可以直接写image.aspx,上一级写../image.aspx,很方便吧.
该方法是我的同事在用的方法,我觉得挺不错,所以保存一下.
|