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>