zoukankan      html  css  js  c++  java
  • 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(00, bmpImage.Width, bmpImage.Height), Color.Blue, Color.DarkRed, 1.2ftrue);
     55                    grpGraphics.DrawString(strValidateCode, font, brhBrush, 22);
     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), 00, 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 窗体设计器生成的代码
    132    }

    133
    134}

    135

  • 相关阅读:
    基于jquery的web在线流程图设计器gooFlow
    angularJS学习笔记二
    angularJS学习笔记一
    JavaScript作用域链详解
    图片查看器(可拖拽,缩放,轮播)
    小议window.event || ev
    Vue安装准备工作
    让VS2013添加新类时自动添加public关键字
    win10太垃圾,真的不好用。
    Bind 和 ScaffoldColumn[转]
  • 原文地址:https://www.cnblogs.com/Spring/p/549840.html
Copyright © 2011-2022 走看看