ASP.NET with C#生成验证码的过程

ASP.NET with C#生成验证码的过程

生成验证码的大概过程就是在后台取得一个随机的字符串,然后该随机字符串绘制成一幅图片,当然,图片可以加上噪声,防止基本上不会出现的N人分析图形数据获取和还原字符串。

具体生成验证码的代码如下,在生成随机字符串的同时会将字符串设置到一个Session["ValidateCode"] 中,实用的时候只要得到用户返回值和Session值比较就可以得出填入的验证码是否一致了。

  1using System;
  2using System.IO;
  3using System.Web.UI;
  4using System.Drawing;
  5using System.Drawing.Imaging;
  6using System.Drawing.Drawing2D;
  7
  8namespace Web.Common
  9{
 10    /**//// <summary>
 11    /// validate 的摘要说明。
 12    /// </summary>
 13    public class Validate: System.Web.UI.Page
 14    {
 15        private void Page_Load(object sender, EventArgs e)
 16        {
 17            string strValidateCode = ValidateCode(6);//取得随机字符串,并设置Session值
 18            DrawValidateCode(strValidateCode,50,100);//绘图
 19        }
 20    
 21        //绘图
 22        private void DrawValidateCode(string strValidateCode,int intFgNoise,int intBgNoise)
 23        {
 24            if(strValidateCode == null || strValidateCode.Trim() == String.Empty)
 25            {
 26                return;
 27            }
 28            else
 29            {
 30                //建立一个位图文件 确立长宽
 31                Bitmap bmpImage = new Bitmap((int)Math.Ceiling((strValidateCode.Length * 12.5)), 22);
 32                Graphics grpGraphics = Graphics.FromImage(bmpImage);
 33    
 34                try
 35                {
 36                    //生成随机生成器
 37                    Random rndRandom = new Random();
 38    
 39                    //清空图片背景色
 40                    grpGraphics.Clear(Color.White);
 41    
 42                    //画图片的背景噪音线
 43                    for(int i=0; i<intBgNoise; i++)
 44                    {
 45                        int int_x1 = rndRandom.Next(bmpImage.Width);
 46                        int int_x2 = rndRandom.Next(bmpImage.Width);
 47                        int int_y1 = rndRandom.Next(bmpImage.Height);
 48                        int int_y2 = rndRandom.Next(bmpImage.Height);
 49    
 50                        grpGraphics.DrawLine(new Pen(Color.Silver), int_x1, int_y1, int_x2, int_y2);
 51                    }
 52                    //把产生的随机数以字体的形式写入画面
 53                    Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
 54                    LinearGradientBrush brhBrush = new LinearGradientBrush(new Rectangle(0, 0, bmpImage.Width, bmpImage.Height), Color.Blue, Color.DarkRed, 1.2f, true);
 55                    grpGraphics.DrawString(strValidateCode, font, brhBrush, 2, 2);
 56    
 57                    //画图片的前景噪音点
 58                    for(int i=0; i<intFgNoise; i++)
 59                    {
 60                        int int_x = rndRandom.Next(bmpImage.Width);
 61                        int int_y = rndRandom.Next(bmpImage.Height);
 62    
 63                        bmpImage.SetPixel(int_x, int_y, Color.FromArgb(rndRandom.Next()));
 64                    }
 65    
 66                    //画图片的边框线
 67                    grpGraphics.DrawRectangle(new Pen(Color.Silver), 0, 0, bmpImage.Width - 1, bmpImage.Height - 1);
 68    
 69                    MemoryStream memsMemoryStream = new MemoryStream();
 70                    bmpImage.Save(memsMemoryStream, ImageFormat.Gif);
 71                    Response.ClearContent();
 72                    Response.ContentType = "image/Gif";
 73                    Response.BinaryWrite(memsMemoryStream.ToArray());
 74                }
 75                finally
 76                {
 77                    grpGraphics.Dispose();
 78                    bmpImage.Dispose();
 79                }
 80            }
 81        }
 82    
 83        //取得随机字符串,并设置Session值
 84        private string ValidateCode(int intLength)
 85        {
 86            int intNumber;
 87            char chrCode;
 88            string strValidateCode = String.Empty;
 89    
 90            Random rndRandom = new Random();
 91    
 92            for(int i=0;i<intLength;i++)
 93            {
 94                intNumber = rndRandom.Next();
 95                if(intNumber % 2 == 0)
 96                {
 97                    chrCode = (char)('0' + (char)(intNumber % 10));//如果随机数是偶数 取余
 98                }
 99                else
100                {
101                    chrCode = (char)('A' + (char)(intNumber % 26));//如果随机数是奇数 选择从[A-Z]
102                }
103                strValidateCode += chrCode.ToString(); 
104            }
105    
106            Session["ValidateCode"] = strValidateCode;//设置Session["ValidateCode"]
107            //Response.Cookies.Add(new HttpCookie("strValidateCode",strValidateCode));
108    
109            return strValidateCode;
110        }
111
112        Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
113        override protected void OnInit(EventArgs e)
114        {
115            //
116            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
117            //
118            InitializeComponent();
119            base.OnInit(e);
120        }
121        
122        /**//// <summary>
123        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
124        /// 此方法的内容。
125        /// </summary>
126        private void InitializeComponent()
127        {    
128            this.Load += new System.EventHandler(this.Page_Load);
129
130        }
131        #endregion
132    }
133
134}
135

时间: 2024-10-27 04:17:32

ASP.NET with C#生成验证码的过程的相关文章

ASP程序无组件生成验证码

程序|无组件|验证码 一.无组件生成验证码-GIF格式 <%Option Explicit ' 显示声明 Class Com_GifCode_Class'''''''''''''''''''''''''''''''''''''''''''''' Author: Layen support@ssaw.net 84815733(QQ)' Thanks: Laomi, Laomiao, NetRube' 2006-01-02'''''''''''''''''''''''''''''''''''''''

用asp实现无组件生成验证码的方法2种_应用技巧

无组件生成验证码-GIF格式 复制代码 代码如下: <% Option Explicit ' 显示声明 Class Com_GifCode_Class ''''''''''''''''''''''''''''''''''''''''''''' ' Author: Layen support@ssaw.net 84815733(QQ) ' Thanks: Laomi, Laomiao, NetRube ' 2006-01-02 '''''''''''''''''''''''''''''''''''

如何在asp.net中动态生成验证码

asp.net|动态|验证码   现在越来越多的网站喜欢搞个验证码出来,而且各个语言基本上都能做到,今天我来一个C#写的! using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web

asp最简单的生成验证码代码_应用技巧

为了防止再次被攻击,做个验证码过滤程序是必要的.我在网上找了一些资料,觉得用别人做好的代码总是很不爽,自己做麻又不会写复杂的代码,特别是生成图片的那种.尝试了网上的很多种方法都不行,不知道为什么,可能没经验吧.感觉挺复杂的. 最后花了一个小时写了一个超级简单的验证代码,哈哈绝对原创,只有十几行代码.是随机生成的,因为比较简单所以对付不了那些强大的发帖软件,不过总比没有的好,放上验证码之后观测了几天多是没有见到发垃圾帖了,应该有效吧,哈哈. 例子: ======show.asp====== 复制代

asp最简单的生成验证码代码

为了防止再次被攻击,做个验证码过滤程序是必要的.我在网上找了一些资料,觉得用别人做好的代码总是很不爽,自己做麻又不会写复杂的代码,特别是生成图片的那种.尝试了网上的很多种方法都不行,不知道为什么,可能没经验吧.感觉挺复杂的. 最后花了一个小时写了一个超级简单的验证代码,哈哈绝对原创,只有十几行代码.是随机生成的,因为比较简单所以对付不了那些强大的发帖软件,不过总比没有的好,放上验证码之后观测了几天多是没有见到发垃圾帖了,应该有效吧,哈哈. 例子: ======show.asp====== 复制代

ASP实现无组件生成验证码-GIF格式

无组件|验证码 <%Option Explicit ' 显示声明 Class Com_GifCode_Class'''''''''''''''''''''''''''''''''''''''''''''' Author: Layen support@ssaw.net 84815733(QQ)' Thanks: Laomi, Laomiao, NetRube' 2006-01-02'''''''''''''''''''''''''''''''''''''''''''''Public Noisy,

Asp.Net生成验证码

asp.net|验证码      经常在论坛里看到有问怎么实现验证码的帖子,其实关于验证码的文章在csdn,dev-club等网站上都有很多,但是很多文章只讲诉了如何输出一个随机生成数字或字符的图象,当然了,这个是验证码的核心了,但是对很多asp.net的初学者来说,怎么使用它生成的图象又成了一个问题(论坛有不少问这个的),这也是我写本文的一个原因.    言归正传,关于验证码的原理,我就不多说了,大家可以参见其他文章,文末附有完整的实例代码,里面有详细的注释,你可以跳过解说文字,直接使用   

ASP生成验证码详细教程

总共有三个文件.讲解如何通过ASP生成验证码.Asp文件:Code.Asp 数据文件:body.Fix , Head.Fix  用法:<img src="code.asp"> <%Option ExplicitResponse.buffer=trueNumCodeFunction NumCode()    Response.Expires = -1    Response.AddHeader "Pragma","no-cache"

ASP.NET中如何动态生成验证码

现在不少网站中都使用了验证码的技术,实现方式也是多种多样,这里主要介绍ASP.NET中可以采用的一种动态生成验证码的方法,可能并不十分完美,但实现难度是属于较低的. 该方法是利用了普通的动态图片生成技术,但比较特别的一点是图片的生成是在一个Page类型的子类的Page_Load方法中执行的.所以Response的ContentType为image/Gif,而非text/html. GraphicalText.aspx.cs代码: using System; using System.Drawin