asp.net怎么生成图片验证码(简单)

转帖一:

新建一个页面image.aspx,添加命名空间:

using system.drawing.imaging;
using system.io;

  然后在page_load事件拷入如下代码:

   //生成4位的验证码
   string tmp = rndnum(4);
   httpcookie a = new httpcookie("imagev",tmp);  
   response.cookies.add(a);
   this.validatecode(tmp);

  接下来向该页面添加两个方法:

private void validatecode(string vnum)
  {
   bitmap img=null;
   graphics g=null;
   memorystream ms=null;

   int gheight=vnum.length*12;
   img=new bitmap(gheight,25);
   g=graphics.fromimage(img);
   //背景颜色
   g.clear(color.white);
   //文字字体
   font f=new font("arial black",10);
   //文字颜色
   solidbrush s=new solidbrush(color.black);
   g.drawstring(vnum,f,s,3,3);
   ms=new memorystream();
   img.save(ms,imageformat.jpeg);
   response.clearcontent();
   response.contenttype="image/jpeg";
   response.binarywrite(ms.toarray());
  
   g.dispose();
   img.dispose();
   response.end();
  }

  private 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,v,w,x,y,z";
   string[] vcarray=vchar.split(new char [] {,});
   string vnum="";
   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);
    if(temp!=-1&&temp==t)
    {
     return rndnum(vcodenum);
    }
    temp=t;
    vnum+=vcarray[t];
   }
   return vnum;
  }

     如果要在页面a.aspx生成验证码,则在该页面添加一个图片控件,假设命名为:imagebutton1,然后在page_load事件中写如下代码:

imagebutton1.imageurl = "image.aspx";

    这样就能生成验证码了,image.aspx页面能随便放在哪里,不过要注意imagebutton1.imageurl 要写对,同级能直接写image.aspx,上一级写../image.aspx,非常方便吧。

 

 

代码摘抄:

下面是另一个比较完整的生成图片验证码的代码:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing.Imaging;
using System.IO;
using System.Drawing;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.GenImg(this.GenCode(4));
        将验证码存储到session中,以便需要时进行验证
        Session["image"] = this.GenCode(4);
    }
    //任意产生4个验证码
    private string GenCode(int num)
    {
        //定义一个验证码数组
        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();
        for (int i = 0; i < num; i++)
        {
            code += source[rd.Next(0, source.Length)];
        }
        return code;
    }
    //生成图片 
    private void GenImg(string code)
    {
        //定义一个画板
        Bitmap myPalette = new Bitmap(60, 20);
        //在画板上定义绘图的实例  
        Graphics gh = Graphics.FromImage(myPalette);
        //定义一个矩形
        Rectangle rc = new Rectangle(0, 0, 60, 20);
        //填充矩形 
        gh.FillRectangle(new SolidBrush(Color.Wheat), rc);
        //在矩形内画出字符串
        gh.DrawString(code, new Font("宋体", 16), new SolidBrush(Color.Black), rc);
        //将图片显示出来  
        myPalette.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        gh.Dispose();
        myPalette.Dispose();
    }     
}


 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值