1 /// <summary> 2 /// ValidaterCodeHandler 的摘要说明(此项是建立一般处理数据) 3 /// </summary> 4 public class ValidaterCodeHandler : IHttpHandler,IRequiresSessionState 5 { 6 public void ProcessRequest(HttpContext context) 7 { 8 string chechCode = GenCode1(5); 9 // 创建用来绘制验证码的位图 10 System.Drawing.Bitmap image = new System.Drawing.Bitmap(100,23); 11 //从位图中获取对应的绘图类对象 12 Graphics g = Graphics.FromImage(image); 13 // 将产生的验证码先存到Session中,方便与用户填写的验证码进行比较 14 context.Session["code"] = chechCode; 15 try 16 { 17 // 生成随机生成器 18 Random random = new Random(); 19 // 清空图片背景色 20 g.Clear(Color.White); 21 // 画图片的背景噪音线 22 for (int i = 0; i < 25; i++) 23 { 24 int x1 = random.Next(image.Width); 25 int x2 = random.Next(image.Width); 26 int y2 = random.Next(image.Height); 27 int y1 = random.Next(image.Height); 28 g.DrawLine(new Pen(Color.Silver),x1,y1,x2,y2); 29 } 30 31 Font font = new Font("Arial",12,System.Drawing.FontStyle.Bold); 32 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0,0,image.Width,image.Height),Color.Blue,Color.DarkRed,1.2F,true); 33 g.DrawString(chechCode,font,brush,2,2); 34 // 画图片的前景噪音点 35 g.DrawRectangle(new Pen(Color.Silver),0,0,image.Width - 1,image.Height - 1); 36 MemoryStream ms = new MemoryStream(); 37 image.Save(ms,ImageFormat.Gif); 38 context.Response.ClearContent(); 39 context.Response.ContentType = "image/Gif"; 40 context.Response.BinaryWrite(ms.ToArray()); 41 } 42 finally 43 { 44 g.Dispose(); 45 image.Dispose(); 46 } 47 } 48 49 public bool IsReusable 50 { 51 get 52 { 53 return false; 54 } 55 } 56 57 /// <summary> 58 /// 产生随机数、字母字符串 59 /// </summary> 60 /// <param name="num">随机出几个字符</param> 61 /// <returns>随机出的字符</returns> 62 private string GenCode1(int num) 63 { 64 string str = "0123456789qwertyuioplkjhgfdsazxcvbnm"; 65 string code = ""; 66 Random rd = new Random(); 67 for (int i = 0; i < num; i++) 68 { 69 code += str.Substring(rd.Next(0,str.Length),1); 70 } 71 return code; 72 } 73 74 /// <summary> 75 /// 产生汉字 76 /// </summary> 77 /// <param name="num">随机出几个字符</param> 78 /// <returns>随机出的字符串</returns> 79 private string GenCode2(int num) 80 { 81 string str = "啥打法是否客户看大能打开富室发高精度将对方开始"; 82 string code = ""; 83 Random rd = new Random(); 84 for (int i = 0; i < num; i++) 85 { 86 code += str.Substring(rd.Next(0,str.Length),1); 87 } 88 89 return code; 90 } 91 } 92 93 94 95 96 // 页面代码 97 <head runat="server"> 98 <title></title> 99 <script type = "text/javascript"> 100 function fresh() { 101 document.getElementById("code").src = "ValidaterCodeHandler.ashx?time = " + new Date(); 102 } 103 </script> 104 </head> 105 <body> 106 <form id="form1" runat="server"> 107 <div> 108 登录页面 109 <br /> 110 <br /> 111 用户名:<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> 112 <br /> 113 <br /> 114 密 码:<asp:TextBox ID="txtPwd" runat="server" TextMode="Password"></asp:TextBox> 115 <br /> 116 <br /> 117 验证码:<asp:TextBox ID="txtValidaterCode" runat="server"></asp:TextBox> 118 <img id = "code" src = "ValidaterCodeHandler.ashx" onclick = "fresh()" /> 119 <a href = "javascript:fresh()">看不清?换一个</a> 120 <br /> 121 <br /> 122 <asp:Button ID="btnLogin" runat="server" Text="登录" onclick="btnLogin_Click" /> 123 124 </div> 125 </form> 126 </body>