using System; using System.Web; using" />
当前位置:文档之家› c#生成验证码的方法

c#生成验证码的方法

新建一个WaterMark.ASHX文件,将如下代码Copy进去<%@ WebHandler Language="C#" Class="WaterMark" %>using System;using System.Web;using System.Drawing;using System.Drawing.Drawing2D;using System.Web.SessionState;public class WaterMark : IHttpHandler, IRequiresSessionState // 要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间{public void ProcessRequest(HttpContext context){string checkCode = GenCode(5); // 产生5位随机字符context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);Graphics g = Graphics.FromImage(image);try{//生成随机生成器Random random = new Random();//清空图片背景色g.Clear(Color.White);// 画图片的背景噪音线int i;for (i = 0; i < 25; i++){int x1 = random.Next(image.Width);int x2 = random.Next(image.Width);int y1 = random.Next(image.Height);int y2 = random.Next(image.Height);g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);}Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);g.DrawString(checkCode, font, brush, 2, 2);//画图片的前景噪音点g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);System.IO.MemoryStream ms = new System.IO.MemoryStream();image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);context.Response.ClearContent();context.Response.ContentType = "image/Gif";context.Response.BinaryWrite(ms.ToArray());}finally{g.Dispose();image.Dispose();}}/// <summary>/// 产生随机字符串/// </summary>/// <param name="num">随机出几个字符</param>/// <returns>随机出的字符串</returns>private string GenCode(int num){string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//"char[] chastr = str.ToCharArray();// string[] source ={ "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 code = "";Random rd = new Random();int i;for (i = 0; i < num; i++){//code += source[rd.Next(0, source.Length)];code += str.Substring(rd.Next(0, str.Length), 1);}return code;}public bool IsReusable{get{return false;}}}页面调用:<script language="javascript" type="text/javascript">function changeCode() {var imgNode = document.getElementById("vimg");imgNode.src = "WaterMark.ashx?t=" + (new Date()).valueOf(); // 这里加个时间的参数是为了防止浏览器缓存的问题}</script><span class="MyLabel">验证码</span><asp:TextBox ID="txtValidate" runat="server" CssClass="Textbox" ></asp:TextBox><img src="WaterMark.ashx" id="vimg" alt="" onclick="changeCode()"/>后置代码:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;using System.Data.SqlClient;using System.Web.Security;//MD5using Entity;using BLL;public partial class sysadmin_Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void btnLogin_Click(object sender, EventArgs e){string code = txtValidate.Text.Trim();string rightCode = Session["code"].ToString();// 判断验证码是否正确if (code != rightCode){Page.ClientScript.RegisterStartupScript(GetType(), "msg", "<script language='javascript' defer>alert('验证码不能为空');</script>");return;}string strPwd = this.txtPwd.Text;// 把密码转为MD5码的形式strPwd = FormsAuthentication.HashPasswordForStoringInConfigFile(strPwd, "MD5");Response.Write(strPwd);string name = this.txtName.Text.Trim();DataSet ds = new AdminManager().SelectAdmin(name, strPwd);if (ds.Tables[0].Rows.Count > 0){Session["Admin"] = name;ClientScript.RegisterStartupScript(this.GetType(), "message", "<script language='javascript' defer>alert('登录成功,正在为你跳转.......');</script>");Response.Redirect("main.aspx");}else{ClientScript.RegisterStartupScript(this.GetType(), "message", "<script language='javascript' defer>alert('登录失败,请检查你的用户名和密码');</script>");}}}。

相关主题