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

目录
相关文章
|
10天前
|
开发框架 .NET C#
【Azure Developer】C# / .NET 静态函数中this关键字的作用
在C#中,`this`关键字用于扩展方法,允许向已有类型添加功能而不修改其源代码。扩展方法必须在静态类中定义,且第一个参数使用`this`修饰,如`public static XElement AcquireElement(this XContainer container, string name, bool addFirst = false)`。这种方式增强了代码的可读性和类型的安全性,尤其在处理第三方库时。
|
1月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
43 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
1月前
|
Java C# 数据安全/隐私保护
|
1月前
|
Cloud Native API C#
C#的现代化:.NET Core引领的技术革命
【6月更文挑战第9天】`.NET Core引领C#现代化,实现跨平台革命,提升性能并支持云原生应用。异步编程模型优化体验,统一API简化开发流程。C#应用场景扩展,开发效率提高,技术创新加速,预示其未来在技术领域将持续发挥关键作用。`
38 10
|
20天前
|
人工智能 开发框架 调度
C#/.NET这些实用的技巧和知识点你都知道吗?
C#/.NET这些实用的技巧和知识点你都知道吗?
|
1月前
|
存储 编解码 算法
C#.NET逃逸时间算法生成分形图像的毕业设计完成!晒晒功能
该文介绍了一个使用C#.NET Visual Studio 2008开发的程序,包含错误修复的Julia、Mandelbrot和优化过的Newton三种算法,生成色彩丰富的分形图像。作者改进了原始算法的效率,将内层循环的画点操作移至外部,提升性能。程序提供五种图形模式,支持放大缩小及颜色更新,并允许用户自定义画布大小以调整精度。还具备保存为高质JPG的功能。附有四张示例图片展示生成的分形效果。
419 3
|
1月前
|
XML 开发框架 .NET
【.NET Core】常见C#代码约定
【.NET Core】常见C#代码约定
25 5
|
1月前
|
前端开发 Java C#
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
|
28天前
|
开发框架 .NET Nacos
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
70 0
|
29天前
|
存储 IDE C#
C#入门:在JetBrains Rider中创建.Net Framework控制台应用程序,输出“Hello, World!”
C#入门:在JetBrains Rider中创建.Net Framework控制台应用程序,输出“Hello, World!”
74 0