<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" Debug="true" %> <%@ import namespace="System"%> <%@ import namespace="System.IO"%> <%@ import namespace="System.Drawing"%> <%@ import namespace="System.Drawing.Imaging"%> <script runat="server"> private void Page_Load(object sender, System.EventArgs e){ ValidateCode( RndNum(6) );;//测试 }
private void ValidateCode(string VNum) { Bitmap Img = null; Graphics g = null ; MemoryStream ms = null ;
int gheight = VNum.Length*12; Img = new Bitmap(gheight,20); g = Graphics.FromImage(Img); Font f = new Font( "新宋体",12 ); SolidBrush s = new SolidBrush( Color.Red ); g.DrawString(VNum,f,s,3,3); ms=new MemoryStream(); Img.Save(ms,ImageFormat.Png); Response.ClearContent() ;//更改http ContentType Response.ContentType="image/Png"; Response.BinaryWrite(ms.ToArray()); //回收资源 g.Dispose(); Img.Dispose(); Response.End(); } private string RndNum(int VcodeNum) { string Vchar = "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[] VcArray = Vchar.Split(',') ; string VNum = "" ;//由于字符串很短,就不用StringBuilder了 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 ; } </script> 
|