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

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

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

    现在越来越多的网站喜欢搞个验证码出来,而且各个语言基本上都能做到,今天我来一个C#写的! using System; using System.Collections; using System.Co ...

  2. 【转】asp.net mvc生成验证码

    ASP.NET MVC实现网站验证码功能 网站添加验证码,主要为防止机器人程序批量注册,或对特定的注册用户用特定程序暴力破解方式,以进行不断的登录.灌水等危害网站的操作.验证码被广泛应用在注册.登录. ...

  3. ASP.NET Core 生成验证码

    点击蓝字 关注我 使用验证码保护网站免受垃圾信息的选择有很多,比如Google ReCaptcha和captcha.com.这两者都可以整合到ASP.NET Core应用中去.然而,如果你出于某些原因 ...

  4. ASP.NET 实现登录界面(生成验证码)

    这周末也没干啥,真正开始ASP,做了个学籍管理系统的登录界面,登录界面主要包括用户名.密码.验证码,界面字体用了<font size="5" color="blue ...

  5. ASP.net 生成验证码

    一.说明 此文是小白在学习张晨光老师的视频教学<<Asp.Net WEB服务器编程技术>>中做的学习笔记,一些知识点也是跟着教程走的,大家也可以去老师的主页去学习,谢谢大家. ...

  6. [转]asp.net(c#)生成验证码 点击可刷新

    先建一张生成验证码的网页CheckCode.aspx: CheckCode.aspx.cs代码如下 添加引用: using System.IO; using System.Drawing; using ...

  7. ASP.NET生成验证码

    Code /************************************************************************/ /* 类名:无 * 功能:生成验证码图片 ...

  8. [asp.net]网站数据安全之验证码

    数据安全是网站实现必不可少的其中一环,其中最基本的就有防止暴力破解这一类的机器人攻击. 机器人攻击,顾名思义,单纯地由程序算法计算出用户名对应的密码,达到破解账户的功能. 机器人攻击的原理如下: 网页 ...

  9. JSP+servlet生成验证码并验证

    生成验证码的基本过程是: <%@ page language="java" import="java.util.*" pageEncoding=" ...

  10. C# 生成验证码 方法一

    注意命名空间的引用 在项目中新建Validcode.aspx <%@ Page Language="C#" AutoEventWireup="true" ...

最新文章

  1. selenium + python自动化测试unittest框架学习(五)webdriver的二次封装
  2. xay loves count 枚举-复杂度-顺序无关-选择
  3. 大数据要学javaweb吗_大数据是私有财产吗?
  4. 决策树(十三)--XGBoost参数调优完全指南
  5. 【多模态】来自Facebook AI的多任务多模态的统一Transformer:向更通用的智能迈出了一步...
  6. 前端CSS - 相对定位,绝对定位,固定定位
  7. python读取dat文件并保存为Excel格式
  8. Python深度学习入门笔记(一):使用Pandas从CSV格式的文件读取数据
  9. 网站编辑与传统媒体编辑的区别及特点
  10. vue tab页面缓存处理
  11. 我的年终总结之一波三折的2018
  12. 什么是机器学习?机器学习与AI的关系?
  13. 品鑒「天籁般的印第安音乐,每次聆听都是一场心灵的洗礼」2019年 06月27星期四
  14. python基础学习笔记——完结
  15. 第四十讲项目三 鸡兔同笼
  16. 【.NET】简单使用Description特性
  17. 链接和二维码被微信拦截(被封锁、被屏蔽、被和谐)的最新解决方法——MaxJump
  18. 西安未来国际java,新开工!西安文化CBD国际商业中心来了!2020 级重点建设项目发布...
  19. 超详细 Zimbra 环境搭建安装
  20. R语言EG(Engle-Granger)两步法协整检验、RESET、格兰杰因果检验、VAR模型分析CPI和PPI时间序列关系...

热门文章

  1. Spring读书笔记(一)
  2. android可以root的版本,Android8.0以上系统ROOT时,Magisk框架替代SpuerSU
  3. php api 在线编辑导出,api在线管理,调试,文档生成工具之Apizza
  4. matlab 准线,在MATLAB中检测目标中心
  5. phpstom怎样导出数据库_详解mysql数据库sql优化技巧总结
  6. python列表操作详解_Python --列表(List)详解
  7. tcp网络示例客户端端以及代码,演示
  8. python教程原版_Python入门教程完整版(懂中文就能学会) pdf版+源码(讲义/笔记)
  9. python网络编程百度云_python网络编程.mobi
  10. 单网卡同时上内外网_Win10双网卡上网冲突(内网、外网)