大家好,
我现在在做一个网站,我现在想做一个留言版
我想在留言的最后提交处设置一个验证码,但是我又不知道该怎么用Visual studio 2005做,有知道请给我点提示。
我先在这里谢谢拉。

解决方案 »

  1.   

    1 首先先建立一个新类(如:CreateImage.cs),然后在这个类中写入下面的代码
      2 //引用
      3 using System.Drawing;
      4 using System.Web;
      5 //执行代码
      6 public static void DrawImage()
      7   {
      8    CreateImage img=new CreateImage();
      9    HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
     10    img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
     11   }
     12   /// <summary>
     13   /// 生成验证图片
     14   /// </summary>
     15   /// <param name="checkCode">验证字符</param>
     16   private void CreateImages(string checkCode)
     17   {
     18    int iwidth = (int)(checkCode.Length * 13);
     19    System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
     20    Graphics g = Graphics.FromImage(image);
     21    g.Clear(Color.White);
     22    //定义颜色
     23    Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
     24    //定义字体 
     25    string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
     26    Random rand = new Random();
     27    //随机输出噪点
     28    for(int i=0;i<50;i++)
     29    {
     30     int x = rand.Next(image.Width);
     31     int y = rand.Next(image.Height);
     32     g.DrawRectangle(new Pen(Color.LightGray, 0),x,y,1,1);
     33    }
     34    //输出不同字体和颜色的验证码字符
     35    for(int i=0;i<checkCode.Length;i++)
     36    {
     37     int cindex = rand.Next(7);
     38     int findex = rand.Next(5);
     39     Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
     40     Brush b = new System.Drawing.SolidBrush(c[cindex]);
     41     int ii=4;
     42     if((i+1)%2==0)
     43     {
     44      ii=2;
     45     }
     46     g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
     47    }
     48    //画一个边框
     49    g.DrawRectangle(new Pen(Color.Black,0),0,0,image.Width-1,image.Height-1);
     50    //输出到浏览器
     51    System.IO.MemoryStream ms = new System.IO.MemoryStream();
     52    image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
     53    HttpContext.Current.Response.ClearContent();
     54    //Response.ClearContent();
     55    HttpContext.Current.Response.ContentType = "image/Jpeg";
     56    HttpContext.Current.Response.BinaryWrite(ms.ToArray());
     57    g.Dispose();
     58    image.Dispose();
     59   }
     60   /// <summary>
     61   /// 生成随机的字母
     62   /// </summary>
     63   /// <param name="VcodeNum">生成字母的个数</param>
     64   /// <returns>string</returns>
     65   public string RndNum(int VcodeNum) 
     66   {
     67    string Vchar = "0,1,2,3,4,5,6,7,8,9" ;
     68    string[] VcArray = Vchar.Split(',') ;
     69    string VNum = "" ; //由于字符串很短,就不用StringBuilder了
     70    int temp = -1 ; //记录上次随机数值,尽量避免生产几个一样的随机数
     71    //采用一个简单的算法以保证生成随机数的不同
     72    Random rand =new Random();
     73    for ( int i = 1 ; i < VcodeNum+1 ; i++ ) 
     74    { 
     75     if ( temp != -1) 
     76     {
     77      rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
     78     } 
     79     int t = rand.Next(VcArray.Length ) ;
     80     if (temp != -1 && temp == t) 
     81     {
     82      return RndNum( VcodeNum );
     83     }
     84     temp = t ;
     85     VNum += VcArray[t];
     86    }
     87    return VNum ;
     88   }
     89 
     90 其次建立一个新的页面(如:Image.aspx),在这个页面Page_Load的事件中写入引用类的方法,例如:
     91 private void Page_Load(object sender, System.EventArgs e)
     92   {
     93    CreateImage.DrawImage ();
     94   }
     95 最后在显示界面上使用Label,Image,Button,TextBox控件,
     96 Image控件的Url属性要连接Image.aspx,然后在写
     97  private void Button1_Click(object sender, System.EventArgs e)
     98   {
     99    if(this.TextBox2.Text.Trim()==Session["CheckCode"].ToString())
    100    {
    101     this.Label1.Text="显示成功!";
    102    }
    103    else
    104    {this.Label1.Text="显示错误!";}
    105   }
      

  2.   

    http://blog.csdn.net/zdyguilong/archive/2006/11/23/1408955.aspx
      

  3.   

    网上很多例子,搜索一下吧
    vs2003与vs2005里面代码没有区别
      

  4.   

    <tr>
                    <td height="29" align="right">验证码∶</td>
                    <td>&nbsp;
                      <asp:TextBox ID="txtValidCode" runat="server" Width="72px" AccessKey="V" AutoCompleteType="Disabled" /><img src="ValidCode.aspx" border="0" /></td>
                  </tr> 验证码页面:ValidCode.aspx
    前台:
    <%@ Page language="c#" Inherits="NetBar.ValidCode" CodeFile="ValidCode.aspx.cs" Theme="" %>
      

  5.   

    后台:
    private void Page_Load(object sender, System.EventArgs e)
      {
       this.CreateCheckCodeImage(GenerateCheckCode());
      }
     private string GenerateCheckCode()
      {
       int number;
       char code;
       string checkCode = String.Empty;   System.Random random = new Random();   for(int i=0; i<5; i++)
       {
        number = random.Next();    if(number % 2 == 0)
         code = (char)('0' + (char)(number % 10));
        else
         code = (char)('A' + (char)(number % 26));    checkCode += code.ToString();
       }   Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));   return checkCode;
      }  private void CreateCheckCodeImage(string checkCode)
      {
       if(checkCode == null || checkCode.Trim() == String.Empty)
        return;   System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
       Graphics g = Graphics.FromImage(image);   try
       {
        //生成随机生成器
        Random random = new Random();    //清空图片背景色
        g.Clear(Color.White);    //画图片的背景噪音线
        for(int 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.FontStyle.Italic));
        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);    //画图片的前景噪音点
        for(int i=0; i<100; i++)
        {
         int x = random.Next(image.Width);
         int y = random.Next(image.Height);     image.SetPixel(x, y, Color.FromArgb(random.Next()));
        }    //画图片的边框线
        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);
        Response.ClearContent();
        Response.ContentType = "image/Gif";
        Response.BinaryWrite(ms.ToArray());
       }
       finally
       {
        g.Dispose();
        image.Dispose();
       }
      }