C#版本的混合的验证码

1@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" Debug="true" 
1@ import namespace="System"
1@ import namespace="System.IO"
1@ import namespace="System.Drawing"
1@ import namespace="System.Drawing.Imaging"
 1<script runat="server">   
 2private void Page_Load(object sender, System.EventArgs e){   
 3ValidateCode( RndNum(6) );  ;//测试    
 4} 
 5
 6private void ValidateCode(string VNum) {   
 7Bitmap Img = null;   
 8Graphics g = null ;   
 9MemoryStream ms = null ;   
10  
11int gheight = VNum.Length*12;   
12Img = new Bitmap(gheight,20);   
13g = Graphics.FromImage(Img);   
14Font f = new Font( "新宋体",12 );   
15SolidBrush s = new SolidBrush( Color.Red );   
16g.DrawString(VNum,f,s,3,3);   
17ms=new MemoryStream();   
18Img.Save(ms,ImageFormat.Png);   
19Response.ClearContent() ;  //更改http ContentType    
20Response.ContentType="image/Png";   
21Response.BinaryWrite(ms.ToArray());   
22//回收资源    
23g.Dispose();   
24Img.Dispose();   
25Response.End();   
26}   
27private string RndNum(int VcodeNum) {   
28string 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" ;   
29string[] VcArray = Vchar.Split(',') ;   
30string VNum = ""  ;//由于字符串很短,就不用StringBuilder了   
31int temp = -1 ;  //记录上次随机数值,尽量避免生产几个一样的随机数    
32  
33//采用一个简单的算法以保证生成随机数的不同   
34Random rand =new Random();   
35for ( int i = 1 ; i < VcodeNum+1 ; i++ ) {   
36if ( temp != -1) {   
37rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));   
38}   
39int t = rand.Next(35) ;   
40if (temp != -1 && temp == t) {   
41return RndNum( VcodeNum );   
42}   
43temp = t ;   
44VNum += VcArray[t];   
45  
46}   
47return VNum ;   
48}   
49</script>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus