验证码技术是为了防止暴力破解等而设定的。现在一般的网站注册等都提供验证码功能,特别是腾讯更是长长的一串。文中参考了别人的代码。有了就没有必要再写了。可以读一下。不过我测试时发现了两次PageLoad的问题。注释了两句即可。同时修改了namespaces。同时提供完整的验证说明: 1 新建VerifyCode.aspx  cs文件代码如下: 
 复制代码 代码如下:   using System;  using System.Collections;  using System.ComponentModel;  using System.Data;  using System.Web;  using System.Web.SessionState;  using System.Web.UI;  using System.Web.UI.WebControls;  using System.Web.UI.HtmlControls;  using System.Drawing;  using System.Drawing.Imaging;  using System.Drawing.Text;  /**///// <summary>  /// 页面验证码程序  /// 使用:在页面中加入HTML代码 <img src="http://www.jb51.net/article/VerifyCode.aspx">  /// </summary>  public partial class VerifyCode : System.Web.UI.Page  ...{  static string[] FontItems = new string[] ...{ "Arial",  "Helvetica",  "Geneva",  "sans-serif",  "Verdana"  };  static Brush[] BrushItems = new Brush[] ...{ Brushes.OliveDrab,  Brushes.ForestGreen,  Brushes.DarkCyan,  Brushes.LightSlateGray,  Brushes.RoyalBlue,  Brushes.SlateBlue,  Brushes.DarkViolet,  Brushes.MediumVioletRed,  Brushes.IndianRed,  Brushes.Firebrick,  Brushes.Chocolate,  Brushes.Peru,  Brushes.Goldenrod  };  static string[] BrushName = new string[] ...{ "OliveDrab",  "ForestGreen",  "DarkCyan",  "LightSlateGray",  "RoyalBlue",  "SlateBlue",  "DarkViolet",  "MediumVioletRed",  "IndianRed",  "Firebrick",  "Chocolate",  "Peru",  "Goldenrod"  };  private static Color BackColor = Color.White;  private static Pen BorderColor = Pens.DarkGray;  private static int Width = 52;  private static int Height = 21;  private Random _random;  private string _code;  private int _brushNameIndex;  override protected void OnInit(EventArgs e)  ...{  //  // CODEGEN: This call is required by the ASP.NET Web Form Designer.  //  //InitializeComponent();  //base.OnInit(e);  }  /**//**//**//// <summary>  /// Required method for Designer support - do not modify  /// the contents of this method with the code editor.  /// </summary>  private void InitializeComponent()  ...{  //this.Load += new System.EventHandler(this.Page_Load);  }  /**//// <summary>  ///  /// </summary>  /// <param></param>  /// <param></param>  public void Page_Load(object sender, System.EventArgs e)  ...{  if (!IsPostBack)  ...{  //  // TODO : initialize  //  this._random = new Random();  this._code = GetRandomCode();  //  // TODO : use Session["code"] save the VerifyCode  //  Session["code"] = this._code;  //  // TODO : output Image  //  this.SetPageNoCache();  this.OnPaint();  }  }  /**//**//**//// <summary>  /// 设置页面不被缓存  /// </summary>  private void SetPageNoCache()  ...{  Response.Buffer = true;  Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);  Response.Expires = 0;  Response.CacheControl = "no-cache";  Response.AppendHeader("Pragma","No-Cache");  }  /**//**//**//// <summary>  /// 取得一个 4 位的随机码  /// </summary>  /// <returns></returns>  private string GetRandomCode()  ...{  return Guid.NewGuid().ToString().Substring(0, 4);  }  /**//**//**//// <summary>  /// 随机取一个字体  /// </summary>  /// <returns></returns>  private Font GetFont()  ...{  int fontIndex = _random.Next(0, FontItems.Length);  FontStyle fontStyle = GetFontStyle(_random.Next(0, 2));  return new Font(FontItems[fontIndex], 12, fontStyle);  }  /**//**//**//// <summary>  /// 取一个字体的样式  /// </summary>  /// <param></param>  /// <returns></returns>  private FontStyle GetFontStyle(int index)  ...{  switch (index)  ...{  case 0:  return FontStyle.Bold;  case 1:  return FontStyle.Italic;  default:  return FontStyle.Regular;  }  }  /**//**//**//// <summary>  /// 随机取一个笔刷  /// </summary>  /// <returns></returns>  private Brush GetBrush()  ...{  int brushIndex = _random.Next(0, BrushItems.Length);  _brushNameIndex = brushIndex;  return BrushItems[brushIndex];  }  /**//**//**//// <summary>  /// 绘画事件  /// </summary>  private void OnPaint()  ...{  Bitmap objBitmap = null;  Graphics g = null;  try  ...{  objBitmap = new Bitmap(Width, Height);  g = Graphics.FromImage(objBitmap);  Paint_Background(g);  Paint_Text(g);  Paint_TextStain(objBitmap);  Paint_Border(g);  objBitmap.Save(Response.OutputStream, ImageFormat.Gif);  Response.ContentType = "image/gif";  }  catch ...{}  finally  ...{  if (null != objBitmap)  objBitmap.Dispose();  if (null != g)  g.Dispose();  }  }  /**//**//**//// <summary>  /// 绘画背景颜色  /// </summary>  /// <param></param>  private void Paint_Background(Graphics g)  ...{  g.Clear(BackColor);  }  /**//**//**//// <summary>  /// 绘画边框  /// </summary>  /// <param></param>  private void Paint_Border(Graphics g)  ...{  g.DrawRectangle(BorderColor, 0, 0, Width - 1, Height - 1);  }  /**//**//**//// <summary>  /// 绘画文字  /// </summary>  /// <param></param>  private void Paint_Text(Graphics g)  ...{  g.DrawString(_code, GetFont(), GetBrush(), 3, 1);  }  /**//**//**//// <summary>  /// 绘画文字噪音点  /// </summary>  /// <param></param>  private void Paint_TextStain(Bitmap b)  ...{  for (int n=0; n<30; n++)  ...{  int x = _random.Next(Width);  int y = _random.Next(Height);  b.SetPixel(x, y, Color.FromName(BrushName[_brushNameIndex]));  }  }  } 
    2 页面引用:  <asp:Image src="http://www.jb51.net/article/VerifyCode.aspx" runat="server" />  一般需要同时提供刷新功能(看不清楚换一张),代码如下  <asp:Image src="http://www.jb51.net/article/VerifyCode.aspx" runat="server" />  <A href="javascript:getimgcode()">刷新验证码</A>  如使用了母版页,则用如下代码:  <img alt="" src="http://www.jb51.net/article/VerifyCode.aspx" /> <%--<asp:Image src="http://www.jb51.net/article/VerifyCode.aspx" runat="server" />--%>    <A href="javascript:getimgcode()">刷新验证码</A>  超链接对应的javascript如下:  <script language="javascript" type="text/javascript">  function getimgcode()  {  var getimagecode = document.getElementById("getcode");  getimagecode.src = "http://www.jb51.net/article/VerifyCode.aspx";  }  </script>  3 判断验证  上述代码是将验证码存贮在Session中,用code来标志。读取代码Session["code"].ToString();  使用中,我们只需要比较Session["code"].ToString()和文本框输入的串(TextBoxCode.Text)是否相同即可进行判断。  if(Session["code"].ToString().Trim().Equals(TextBoxCode.Text.Trim()))  ...{  Response.Write("Success");  }  测试通过!                         (编辑:我爱故事小小网_铜陵站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |