有没有生成验证图片的代码?就是那种要输入一个数字才可以进行注册的。最好全在内存中做,不要把图片写到硬盘。

解决方案 »

  1.   

    我有写在硬盘的,不写在硬盘也差不多
    祝贺!
    写在内存:    你用一个页面专门生成图片.RESPONSE为IMG格式,把验证的IMG的URL链接到这个页面就可以新建一位图,在上面画,很简单的
      

  2.   

    http://xiaom.com/Article_Print.asp?ArticleID=1565
      

  3.   

    以前看到过一个,方法同 swzlxm(守望者) 的一样,我找找看
      

  4.   

    <img src="validateimage.aspx" border="0" />validateimage.aspx这一页面用来生成图片。无需写盘
      

  5.   

    <img src="validateimage.aspx" border="0" />validateimage.aspx这个页面用来生成图片。无需写盘
      

  6.   

    在ASP.NET下实现数字和字符相混合的验证码
    发布时间:2004-8-26 
        
        经常在论坛里看到有问怎么实现验证码的帖子,其实关于验证码的文章在CSDN,DEV-CLUB等网站上都有很多,但是很多文章只讲诉了如何输出一个随机生成数字或字符的图象,当然了,这个是验证码的核心了,但是对很多ASP.NET的初学者来说,怎么使用它生成的图象又成了一个问题(论坛有不少问这个的),这也是我写本文的一个原因.  
    言归正传,关于验证码的原理,我就不多说了,大家可以参见其他文章,文末附有完整的实例代码,里面有详细的注释,你可以跳过解说文字,直接使用  
    首先,我要简要说说Session和ViewState的用法,因为后面会用到它  
    把数据存储在Session中:Session("key")="test"  
    从Session取值:dim testvalue as string=Session("key")  
    类似的:  
    把数据存储在ViewState中:ViewState("key")="test"  
    从ViewState中取值:dim testvalue as string=ViewState("key")  
    关于ViewState的更详细的资料,你可以参看MSDN的<<ASP.NET ViewState 初探>>一文  
    百闻不如一见,有时代码本身就比任何解说更有表现力,所以在此就不对代码解说太多了,本文实现的验证码需要用到两个文件:  
    gif.aspx 该文件用于生成验证码  
    ValidateCode.aspx 该文件用来测试验证码(即如何使用)  下面给出gif.aspx的完整代码:  
    <%@ import namespace="System"%>  
    <%@ import namespace="System.io"%>  
    <%@ import namespace="System.Drawing"%>  
    <%@ import namespace="System.Drawing.Imaging"%>  
    <script language="vb" runat="server">  
    Sub Page_Load(Sender as object,e as eventargs)  
    ’RndNum是一个自定义函数  
    dim VNum as string=RndNum(4)  
    Session("VNum")=VNum  
    ValidateCode(VNum)  
    End Sub  
    ’生成图象验证码函数  
    Sub ValidateCode(VNum)  
    Dim Img as System.Drawing.Bitmap  
    Dim g as Graphics  
    Dim ms as MemoryStream  
    dim gheight as integer=Int(Len(VNum)*11.5)  
    ’gheight为图片宽度,根据字符长度自动更改图片宽度  
    img=new BitMap(Gheight,20)  
    g=Graphics.FromImage(img)  
    g.DrawString(VNum,(New Font("Arial",10)),(New SolidBrush(color.blue)),3,3)’在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)  
    ms=New MemoryStream()  
    img.Save(ms,ImageFormat.Png)  
    Response.ClearContent() ’需要输出图象信息 要修改HTTP头  
    Response.ContentType="image/Png"  
    Response.BinaryWrite(ms.ToArray())  
    g.Dispose()  
    img.Dispose()  
    Response.End()  
    End Sub  
    ’--------------------------------------------  
    ’函数名称:RndNum  
    ’函数参数:VcodeNum--设定返回随机字符串的位数  
    ’函数功能:产生数字和字符混合的随机字符串  
    Function RndNum(VcodeNum)  
    dim Vchar as string="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"  
    dim VcArray() as string=split(Vchar,",") ’将字符串生成数组  
    dim VNum as string=""  
    dim i as byte  
    For i=1 to VcodeNum  
    Randomize  
    VNum=VNum & VcArray(Int(35*Rnd)) ’数组一般从0开始读取,所以这里为35*Rnd  
    Next  
    Return VNum  
    End Function  
    </script>  
    那么又应该如何使用该文件生成的图象验证码,看这句代码:  
    <asp:Image id="Image1" runat="server" ImageUrl="gif.aspx" />  
    这就是用来显示验证码的Image控件,你可以把它放在任何你喜欢的地方,下面的给出详细的使用代码,你把它保存为ValidateCode.aspx,并把它和gif.aspx放在同一目录下,在浏览器中打开ValidateCode.aspx,就可以测试它的效果了:  ValidateCode.aspx:
    <script language="vb" Runat="Server">  
    Sub Page_Load(Sender as object,e as eventargs)  
    dim VNum as string=Session("VNum")  
    Session.Abandon()  
    ViewState("VNum")=VNum  
    End Sub  
    ’下面的事件代码是用来测试验证码,可以根据需要更改  
    Sub btnSubmit_click(sender as object,e as eventargs)  
    ’判断输入的验证码与所给是否相同  
    If txtValidateCode.text=Cstr(ViewState("VNum")) then  
    lblShow.text="<font color=’red’>提示:验证通过</font>"  
    Else  
    lblShow.text="所填写的验证码与所给的不符"  
    End If  
    End Sub  
    </script>  
    <html>  
    <body>  
    <form runat="server">  
    <div align="center">  
    <table width="750">  
    <!--DWLayoutTable-->  
    <tr>  
    <td width="256" height="46">&nbsp; </td>  
    <td width="9">&nbsp;</td>  
    <td width="88">&nbsp;</td>  
    <td width="87">&nbsp;</td>  
    <td width="100">&nbsp;</td>  
    <td width="68">&nbsp;</td>  
    <td width="97">&nbsp;</td>  
    </tr>  
    <tr>  
    <td height="21"></td>  
    <td></td>  
    <td colspan="3" valign="top"><asp:label ID="lblShow" runat="server"></asp:label></td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    </tr>  
    <tr>  
    <td height="14"></td>  
    <td></td>  
    <td></td>  
    <td></td>  
    <td></td>  
    <td></td>  
    <td></td>  
    </tr>  
    <tr>  
    <td height="21">&nbsp;</td>  
    <td colspan="2" valign="middle">验证码:</td>  
    <td valign="top"><asp:Image id="Image1" runat="server" ImageUrl="gif.aspx" /></td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    </tr>  
    <tr>  
    <td height="20">&nbsp;</td>  
    <td colspan="2" valign="top">输入验证码:</td>  
    <td valign="top"><asp:textbox ID="txtValidateCode" runat="server" TextMode="SingleLine" />
    </td>  
    <td colspan="2" valign="middle"><font color="#FF0000" size="2">*注意:区分大小写</font></td>  
    <td>&nbsp;</td>  
    </tr>  
    <tr>  
    <td height="25">&nbsp;</td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    </tr>  
    <tr>  
    <td height="19">&nbsp;</td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    <td valign="top"><asp:button ID="btnSubmit" runat="server" Text="比较" onclick="btnSubmit_click" /></td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    <td>&nbsp;</td>  
    </tr>  
    </table>  
    </div>  
    </form>  
    </body>  
    </html>   
      

  7.   

    UP 一下,我也很想知道,楼主学会了,别忘了告诉大家呀!都是好兄弟,好东西要共享!
    最后别忘记给我送分呀!快过年了,祝csdn所有的朋友:新年快乐!梦想成真!
      

  8.   

    生成图片的Gif.aspx文件!需要引入以下两名命名空间!
    -----------------------------------start----------------------------------------------
    using System.Drawing;
    using System.Drawing.Imaging;
    private void Page_Load(object sender, System.EventArgs e)
      {
       // 在此处放置用户代码以初始化页面
       //RndNum是一个自定义函数
       string VNum=RndNum(4); //这里的数字4代表显示的是4位的验证字符串!
       Session["VNum"]=VNum;
       ValidateCode(VNum);
      }
    //生成图像函数
      private void ValidateCode(string VNum) 
      {
       int Gheight=(int)(VNum.Length * 11.5);
       //gheight为图片宽度,根据字符长度自动更改图片宽度
       System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,20);
       Graphics g = Graphics.FromImage(Img);
       g.DrawString(VNum,new System.Drawing.Font("Arial",10),new System.Drawing.SolidBrush(Color.Red),3,3); 
       //在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y) 
       System.IO.MemoryStream ms=new System.IO.MemoryStream();
       Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png); 
       Response.ClearContent(); //需要输出图象信息 要修改HTTP头 
       Response.ContentType="image/Png";
       Response.BinaryWrite(ms.ToArray());
       g.Dispose();
       Img.Dispose(); 
       Response.End();
      }//生成随机数函数中从Vchar数组中随机抽取
    //字母区分大小写
    public string RndNum(int VcodeNum) 
      {
       string 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" ;
       
       string[] VcArray = Vchar.Split(',') ;
       string  VNum = "" ;//由于字符串很短,就不用StringBuilder了
       int temp = -1 ;//记录上次随机数值,尽量避免生产几个一样的随机数   //采用一个简单的算法以保证生成随机数的不同
       Random rand =new Random();
       for ( int i = 1 ; i < VcodeNum+1 ; i++ ) 
       {    
        if ( temp != -1) 
        {
         rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
        }    
        //int t =  rand.Next(35) ;
        int t=rand.Next(35);
        if (temp != -1 && temp == t) 
        {
         return RndNum( VcodeNum );
        }
        temp = t  ;
        VNum += VcArray[t];   }
       return VNum ;
      }
    -----------------------------------end--------------------------------------------下面是Login.Aspx在在调用提交按钮的响应事件中
    public void doit(object sender, System.EventArgs e)
      {
       if(Page.IsValid)
       {
         
        string VNum;
        VNum=Session["VNum"].ToString();        
        Session.Abandon();
        ViewState["VNum"]=VNum;
        if(this.Vcode.Text==ViewState["VNum"].ToString())
        {      Hover.Manage.CheckLogin obj=new Hover.Manage.CheckLogin();
         string name=username.Text;
         string password=FormsAuthentication.HashPasswordForStoringInConfigFile(pass.Text.ToString(),"md5");
         if(!obj.checklogin(name,password))
         {
          Response.Redirect("../Error.aspx?action=Errorlogin");
          Response.End();
          return;
         }
         else
         {
          Session.Add("adminname",name);
          Session.Add("adminpass",password);
          Response.Redirect("Default.aspx");
          Response.End();
          return;
         }
         
        }
        else
        {
         Response.Write("<script>alert(\"请输入正确的附加码!\");</script>");
        }
       }
      }
       如果提交过来的验证字符串正确就验证是否是合法用户!
    否则弹出提示返回登陆页!你也可以简化此页!
       if(this.Vcode.Text==ViewState["VNum"].ToString())
        { 
            Response.Write("验证码正确");
        }
       else
        {
            Response.Write("验证码错误!");
        }
    -----------------------------------The End--------------------------------------------