ASP.NET 图形验证码

非原创,借鉴别人改了一下的.

第一步,建一个面页ValidatePage.aspx

CodeBehind代码如下

.........
...........//这里是创建页面时默认的命名空间,下面三个是要自己添加的
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;



public partial class ValidatePage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
          ValidateCode(); //生成验证码方法

    }

   //把随机数字与图形结合生成图片
    private void ValidateCode() {
        string validateCode = RndNum(4);// 设置随机数字为4个
        Bitmap bitmap = new Bitmap(4*12,25);              //长度,高度
        Graphics g = Graphics.FromImage(bitmap);        
        g.Clear(Color.LightSteelBlue);                   //背景色
        Font f = new Font("Arical Black",10);          //字体
        SolidBrush s = new SolidBrush(Color.RoyalBlue);      //字颜色  
        g.DrawString(validateCode, f, s, 3, 3);
        MemoryStream m = new MemoryStream(); 
        bitmap.Save(m, ImageFormat.Jpeg);  //图片格式
        HttpCookie mycook = new HttpCookie("ValidateImage");   //用建值式保存进cookies 
        mycook["myKey"] = validateCode;                                       
        Response.Cookies.Add(mycook);                                                 
        Response.ClearContent();                                                
        Response.ContentType = "images/Jpeg";
        Response.BinaryWrite(m.ToArray());
        g.Dispose();                //下面都是释放资源方法
        bitmap.Dispose();
        Response.End();
    }

   //生成随机数字方法
    private string RndNum(int VcodeNum)
    {
        string vchar = "0,1,2,3,4,5,6,7,8,9,q,w,e,r,t,y,u,i,o,p" +
            ",a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m";
        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;
    }
}
 
 
第二步 建一个测试页面,html代码下写
     <img src="ValidatePage.aspx" />
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <asp:Button ID="Button1" runat="server" Text="test" Width="209px"
        οnclick="Button1_Click" /><br />
 
 
第三步 双击button进入CodeBehind下
       
        if (Request.Cookies["ValidateImage"]!= null)
        {
            string valid = Request.Cookies["ValidateImage"]["myKey"].ToString();
            if (TextBox1.Text.ToString() == valid)
            {
                Response.Write("Great. the validate is success."); //go to do that you wamna.
            }
            else
            {
                Response.Write("Not same!");
            }
        }
        else
        {
            Response.Write("That is bad luck,your IE is not allow to using 'Cookies'.");
        }
 
这个组建已经不太好找了,以前在国外网站上下载到的! 共享给大家! 大家经常在网上登陆的时候经常会看到让你输入验证码,有的是文字的,有的呢是图片,比如chinaren.com校友录中留言的时候,我们就会看到数字图片验证码;网上关于数字文字验证码实现方法的相关资料很多,而我们这里介绍的是数字和字母随机组成的并且生成图片的验证码的实现方法。看起来很复杂、其实很简单的,大家跟着我往下看: 首先,我们先介绍一下设计思路,数字和字母的随机组合生成验证码,然后将验证码生成图片,这里“数字和字母的组合”应该是随机取出来的;如果是专门的数字验证码,我们可以这样实现: ycodenum=4 '验证码的位数,或者说成个数 for i=1 to ycodenum Randomize '初始化随机数发生器 ycode=ycode&Int((9*Rnd)) 'rnd是随机数,从0到1之间的任意实数,这里获得0到9之间的整数 next response.write ycode '就可以输出数字验证码(4位) 然而,我们要让数字和字母同样随机生成,这里我们可以用到数组来实现这种效果,如下: ychar="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" '将数字和大写字母组成一个字符串 yc=split(char,",") '将字符串生成数组 ycodenum=4 for i=1 to ycodenum Randomize ycode=ycode&yc(Int((35*Rnd))) '数组一般从0开始读取,所以这里为35*Rnd next response.write ycode 现在看看输出结果是不是数字和字母随机组合的呢? 下面看看怎样生成图片,这个也许有些朋友知道:asp不能生成图片,必须使用asp组件。不错,我们这里使用的是ASP图象组件shotgraph。有一点大家注意,服务器不是自己的不能用哦,因为你装不了这组件。 我们看看生成图片的代码: ychar="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" '将数字和大写字母组成一个字符串 yc=split(char,",") '将字符串生成数组 ycodenum=4 for i=1 to ycodenum Randomize ycode=ycode&yc(Int((35*Rnd))) '数组一般从0开始读取,所以这里为35*Rnd next Response.Clear Response.ContentType="image/gif" set obj=Server.CreateObject("shotgraph.image") x=55 '图片的宽 y=26 '图片的高 obj.CreateImage x,y,8 '8是图片的颜色8位 obj.SetColor 0,55,126,222 obj.SetColor 1,255,255,255 obj.CreatePen "PS_SOLID",1,0 obj.SetBgColor 0 obj.Rectangle 0,0,x-1,y-1 obj.SetBkMode "TRANSPARENT" obj.CreateFont "Arial",136,18,1,False,False,False,False obj.SetTextColor 1 obj.TextOut 5,4,ycode&" " img=obj.GifImage(-1,1,"") Response.BinaryWrite (img)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值