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

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

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

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

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


  1 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System;
  2 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.IO;
  3 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.Web.UI;
  4 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.Drawing;
  5 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.Drawing.Imaging;
  6 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.Drawing.Drawing2D;
  7 img_a6339ee3e57d1d52bc7d02b338e15a60.gif
  8 img_a6339ee3e57d1d52bc7d02b338e15a60.gif namespace  Web.Common
  9 img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
 10img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    /**//// <summary>
 11img_33d02437d135341f0800e3d415312ae8.gif    /// validate 的摘要说明。
 12img_105a1e124122b2abcee4ea8e9f5108f3.gif    /// </summary>

 13img_33d02437d135341f0800e3d415312ae8.gif    public class Validate: System.Web.UI.Page
 14img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 15img_33d02437d135341f0800e3d415312ae8.gif        private void Page_Load(object sender, EventArgs e)
 16img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 17img_33d02437d135341f0800e3d415312ae8.gif            string strValidateCode = ValidateCode(6);//取得随机字符串,并设置Session值
 18img_33d02437d135341f0800e3d415312ae8.gif            DrawValidateCode(strValidateCode,50,100);//绘图
 19img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 20img_33d02437d135341f0800e3d415312ae8.gif    
 21img_33d02437d135341f0800e3d415312ae8.gif        //绘图
 22img_33d02437d135341f0800e3d415312ae8.gif        private void DrawValidateCode(string strValidateCode,int intFgNoise,int intBgNoise)
 23img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 24img_33d02437d135341f0800e3d415312ae8.gif            if(strValidateCode == null || strValidateCode.Trim() == String.Empty)
 25img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 26img_33d02437d135341f0800e3d415312ae8.gif                return;
 27img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

 28img_33d02437d135341f0800e3d415312ae8.gif            else
 29img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 30img_33d02437d135341f0800e3d415312ae8.gif                //建立一个位图文件 确立长宽
 31img_33d02437d135341f0800e3d415312ae8.gif                Bitmap bmpImage = new Bitmap((int)Math.Ceiling((strValidateCode.Length * 12.5)), 22);
 32img_33d02437d135341f0800e3d415312ae8.gif                Graphics grpGraphics = Graphics.FromImage(bmpImage);
 33img_33d02437d135341f0800e3d415312ae8.gif    
 34img_33d02437d135341f0800e3d415312ae8.gif                try
 35img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 36img_33d02437d135341f0800e3d415312ae8.gif                    //生成随机生成器
 37img_33d02437d135341f0800e3d415312ae8.gif                    Random rndRandom = new Random();
 38img_33d02437d135341f0800e3d415312ae8.gif    
 39img_33d02437d135341f0800e3d415312ae8.gif                    //清空图片背景色
 40img_33d02437d135341f0800e3d415312ae8.gif                    grpGraphics.Clear(Color.White);
 41img_33d02437d135341f0800e3d415312ae8.gif    
 42img_33d02437d135341f0800e3d415312ae8.gif                    //画图片的背景噪音线
 43img_33d02437d135341f0800e3d415312ae8.gif                    for(int i=0; i<intBgNoise; i++)
 44img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                    img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 45img_33d02437d135341f0800e3d415312ae8.gif                        int int_x1 = rndRandom.Next(bmpImage.Width);
 46img_33d02437d135341f0800e3d415312ae8.gif                        int int_x2 = rndRandom.Next(bmpImage.Width);
 47img_33d02437d135341f0800e3d415312ae8.gif                        int int_y1 = rndRandom.Next(bmpImage.Height);
 48img_33d02437d135341f0800e3d415312ae8.gif                        int int_y2 = rndRandom.Next(bmpImage.Height);
 49img_33d02437d135341f0800e3d415312ae8.gif    
 50img_33d02437d135341f0800e3d415312ae8.gif                        grpGraphics.DrawLine(new Pen(Color.Silver), int_x1, int_y1, int_x2, int_y2);
 51img_105a1e124122b2abcee4ea8e9f5108f3.gif                    }

 52img_33d02437d135341f0800e3d415312ae8.gif                    //把产生的随机数以字体的形式写入画面
 53img_33d02437d135341f0800e3d415312ae8.gif                    Font font = new Font("Arial"12, (FontStyle.Bold | FontStyle.Italic));
 54img_33d02437d135341f0800e3d415312ae8.gif                    LinearGradientBrush brhBrush = new LinearGradientBrush(new Rectangle(00, bmpImage.Width, bmpImage.Height), Color.Blue, Color.DarkRed, 1.2ftrue);
 55img_33d02437d135341f0800e3d415312ae8.gif                    grpGraphics.DrawString(strValidateCode, font, brhBrush, 22);
 56img_33d02437d135341f0800e3d415312ae8.gif    
 57img_33d02437d135341f0800e3d415312ae8.gif                    //画图片的前景噪音点
 58img_33d02437d135341f0800e3d415312ae8.gif                    for(int i=0; i<intFgNoise; i++)
 59img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                    img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 60img_33d02437d135341f0800e3d415312ae8.gif                        int int_x = rndRandom.Next(bmpImage.Width);
 61img_33d02437d135341f0800e3d415312ae8.gif                        int int_y = rndRandom.Next(bmpImage.Height);
 62img_33d02437d135341f0800e3d415312ae8.gif    
 63img_33d02437d135341f0800e3d415312ae8.gif                        bmpImage.SetPixel(int_x, int_y, Color.FromArgb(rndRandom.Next()));
 64img_105a1e124122b2abcee4ea8e9f5108f3.gif                    }

 65img_33d02437d135341f0800e3d415312ae8.gif    
 66img_33d02437d135341f0800e3d415312ae8.gif                    //画图片的边框线
 67img_33d02437d135341f0800e3d415312ae8.gif                    grpGraphics.DrawRectangle(new Pen(Color.Silver), 00, bmpImage.Width - 1, bmpImage.Height - 1);
 68img_33d02437d135341f0800e3d415312ae8.gif    
 69img_33d02437d135341f0800e3d415312ae8.gif                    MemoryStream memsMemoryStream = new MemoryStream();
 70img_33d02437d135341f0800e3d415312ae8.gif                    bmpImage.Save(memsMemoryStream, ImageFormat.Gif);
 71img_33d02437d135341f0800e3d415312ae8.gif                    Response.ClearContent();
 72img_33d02437d135341f0800e3d415312ae8.gif                    Response.ContentType = "image/Gif";
 73img_33d02437d135341f0800e3d415312ae8.gif                    Response.BinaryWrite(memsMemoryStream.ToArray());
 74img_105a1e124122b2abcee4ea8e9f5108f3.gif                }

 75img_33d02437d135341f0800e3d415312ae8.gif                finally
 76img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 77img_33d02437d135341f0800e3d415312ae8.gif                    grpGraphics.Dispose();
 78img_33d02437d135341f0800e3d415312ae8.gif                    bmpImage.Dispose();
 79img_105a1e124122b2abcee4ea8e9f5108f3.gif                }

 80img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

 81img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 82img_33d02437d135341f0800e3d415312ae8.gif    
 83img_33d02437d135341f0800e3d415312ae8.gif        //取得随机字符串,并设置Session值
 84img_33d02437d135341f0800e3d415312ae8.gif        private string ValidateCode(int intLength)
 85img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 86img_33d02437d135341f0800e3d415312ae8.gif            int intNumber;
 87img_33d02437d135341f0800e3d415312ae8.gif            char chrCode;
 88img_33d02437d135341f0800e3d415312ae8.gif            string strValidateCode = String.Empty;
 89img_33d02437d135341f0800e3d415312ae8.gif    
 90img_33d02437d135341f0800e3d415312ae8.gif            Random rndRandom = new Random();
 91img_33d02437d135341f0800e3d415312ae8.gif    
 92img_33d02437d135341f0800e3d415312ae8.gif            for(int i=0;i<intLength;i++)
 93img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 94img_33d02437d135341f0800e3d415312ae8.gif                intNumber = rndRandom.Next();
 95img_33d02437d135341f0800e3d415312ae8.gif                if(intNumber % 2 == 0)
 96img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 97img_33d02437d135341f0800e3d415312ae8.gif                    chrCode = (char)('0' + (char)(intNumber % 10));//如果随机数是偶数 取余
 98img_105a1e124122b2abcee4ea8e9f5108f3.gif                }

 99img_33d02437d135341f0800e3d415312ae8.gif                else
100img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
101img_33d02437d135341f0800e3d415312ae8.gif                    chrCode = (char)('A' + (char)(intNumber % 26));//如果随机数是奇数 选择从[A-Z]
102img_105a1e124122b2abcee4ea8e9f5108f3.gif                }

103img_33d02437d135341f0800e3d415312ae8.gif                strValidateCode += chrCode.ToString(); 
104img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

105img_33d02437d135341f0800e3d415312ae8.gif    
106img_33d02437d135341f0800e3d415312ae8.gif            Session["ValidateCode"= strValidateCode;//设置Session["ValidateCode"]
107img_33d02437d135341f0800e3d415312ae8.gif            //Response.Cookies.Add(new HttpCookie("strValidateCode",strValidateCode));
108img_33d02437d135341f0800e3d415312ae8.gif    
109img_33d02437d135341f0800e3d415312ae8.gif            return strValidateCode;
110img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

111img_33d02437d135341f0800e3d415312ae8.gif
112img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
113img_33d02437d135341f0800e3d415312ae8.gif        override protected void OnInit(EventArgs e)
114img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
115img_33d02437d135341f0800e3d415312ae8.gif            //
116img_33d02437d135341f0800e3d415312ae8.gif            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
117img_33d02437d135341f0800e3d415312ae8.gif            //
118img_33d02437d135341f0800e3d415312ae8.gif            InitializeComponent();
119img_33d02437d135341f0800e3d415312ae8.gif            base.OnInit(e);
120img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

121img_33d02437d135341f0800e3d415312ae8.gif        
122img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        /**//// <summary>
123img_33d02437d135341f0800e3d415312ae8.gif        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
124img_33d02437d135341f0800e3d415312ae8.gif        /// 此方法的内容。
125img_105a1e124122b2abcee4ea8e9f5108f3.gif        /// </summary>

126img_33d02437d135341f0800e3d415312ae8.gif        private void InitializeComponent()
127img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{    
128img_33d02437d135341f0800e3d415312ae8.gif            this.Load += new System.EventHandler(this.Page_Load);
129img_33d02437d135341f0800e3d415312ae8.gif
130img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

131img_105a1e124122b2abcee4ea8e9f5108f3.gif        #endregion

132img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

133img_33d02437d135341f0800e3d415312ae8.gif
134img_05dd8d549cff04457a6366b0a7c9352a.gif}

135 img_a6339ee3e57d1d52bc7d02b338e15a60.gif

目录
相关文章
|
14天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
2月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
17天前
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
41 7
|
14天前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
14天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
13天前
|
人工智能 开发框架 安全
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
|
14天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
14天前
|
程序员 C# 图形学
全面的C#/.NET自学入门指南
全面的C#/.NET自学入门指南
|
2月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
36 1
|
2月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
62 8