ASP.NET验证码

来源:互联网 发布:微商做图片的软件 编辑:程序博客网 时间:2024/05/07 05:08
 1 验证码样式一 2          protected void Page_Load(object sender, EventArgs e) 3          { 4              if (!Page.IsPostBack) 5              { 6                  this.GenImg(this.GenCode(4)); 7              } 8          } 9          private string GenCode(int num)10          {11              string[] source ={"1","2","3","4","5","6","7","8","9",12                           "A","B","C","D","E","F","G","H","I","J","K","L","M","N",13                         "P","Q","R","S","T","U","V","W","X","Y","Z"};14              string code = "";15              Random rd = new Random();16              for (int i = 0; i < num; i++)17              {18                  code += source[rd.Next(0, source.Length)];19              }20              return code;21          }22  23          //生成图片24          private void GenImg(string code)25          {26              Bitmap myPalette = new Bitmap(40, 18);27  28              Graphics gh = Graphics.FromImage(myPalette);29  30              Rectangle rc = new Rectangle(0, 0, 40, 18);31  32              gh.FillRectangle(new SolidBrush(Color.Gray), rc);33              gh.DrawString(code, new Font("宋体", 12), new SolidBrush(Color.White), rc);34  35              myPalette.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);36  37              Session["ValidateCode"] = code;38  39              gh.Dispose();40              myPalette.Dispose();41          }

 1 验证码样式二 2   protected void Page_Load(object sender, EventArgs e) 3          { 4              CreateCheckCodeImage(GenerateCheckCode()); 5          } 6   7          //随机生成验证码 8          private string GenerateCheckCode() 9          {10              int number;11              char code;12              string checkCode = String.Empty;13              System.Random random = new Random();14              for (int i = 0; i < 5; i++)15              {16                  number = random.Next();17                  if (number % 2 == 0)18                      code = (char)('0' + (char)(number % 10));19                  else20                      code = (char)('A' + (char)(number % 26));21                  checkCode += code.ToString();22              }23              Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));24              return checkCode;25          }26  27          //生成验证码图片28          private void CreateCheckCodeImage(string checkCode)29          {30              if (checkCode == null || checkCode.Trim() == String.Empty)31                  return;32              System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);33              Graphics g = Graphics.FromImage(image);34              try35              {36                  Random random = new Random();                       37                  g.Clear(Color.White);                38                  for (int i = 0; i < 25; i++)39                  {40                      int x1 = random.Next(image.Width);41                      int x2 = random.Next(image.Width);42                      int y1 = random.Next(image.Height);43                      int y2 = random.Next(image.Height);44                      g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);45                  }46  47                  Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));48                  System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);49                  g.DrawString(checkCode, font, brush, 2, 2);               50                  for (int i = 0; i < 100; i++)51                  {52                      int x = random.Next(image.Width);53                      int y = random.Next(image.Height);54  55                      image.SetPixel(x, y, Color.FromArgb(random.Next()));56                  }                57                  g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);58                  System.IO.MemoryStream ms = new System.IO.MemoryStream();59                  image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);60                  Response.ClearContent();61                  Response.ContentType = "image/Gif";62                  Response.BinaryWrite(ms.ToArray());63              }64              finally65              {66                  g.Dispose();67                  image.Dispose();68              }69          }

 1 验证码样式三 2   private static Random rnd = new Random(); 3   4          protected void Page_Load(object sender, EventArgs e) 5          {             6              int width = 60; 7              int height = 20;             8              Bitmap img = new Bitmap(width, height);            9              Graphics g = Graphics.FromImage(img);           10              Brush b;           11              b = new SolidBrush(Color.FromArgb(rnd.Next(200, 250), rnd.Next(200, 250), rnd.Next(200, 250)));            12              g.FillRectangle(b, 0, 0, width, height);13              Pen p = new Pen(Color.FromArgb(rnd.Next(160, 200), rnd.Next(160, 200), rnd.Next(160, 200)));14              for (int i = 0; i < 100; i++)15              {16                  int x1 = rnd.Next(width);17                  int y1 = rnd.Next(height);              18                  int x2 = x1 + rnd.Next(12);19                  int y2 = y1 + rnd.Next(12);               20                  g.DrawLine(p, x1, y1, x2, y2);21              }            22              Font f = new Font("Courier New", 16, FontStyle.Bold);            23              PointF pf;          24              StringBuilder sb = new StringBuilder();            25              for (int i = 0; i < 4; i++)26              {                27                  string s = rnd.Next(10).ToString();28                  sb.Append(s);29                  b = new SolidBrush(Color.FromArgb(rnd.Next(20, 130), rnd.Next(20, 130), rnd.Next(20, 130)));                30                  pf = new PointF(13 * i, -1);31                  g.DrawString(s, f, b, pf);32              }            33              Session["Captcha"] = sb.ToString();           34              Response.ContentType = "image/pjpeg";35              img.Save(Response.OutputStream, ImageFormat.Jpeg);            36              b.Dispose();37              g.Dispose();38              img.Dispose();39          }

 1 验证码样式四 2  protected void Page_Load(object sender, EventArgs e) 3          {             4              System.Random rand = new Random(); 5              int len = rand.Next(4, 6); 6              char[] chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray(); 7              System.Text.StringBuilder myStr = new System.Text.StringBuilder(); 8              for (int iCount = 0; iCount < len; iCount++) 9              {10                  myStr.Append(chars[rand.Next(chars.Length)]);11              }12              string text = myStr.ToString();            13              this.Session["checkcode"] = text;14              Size ImageSize = Size.Empty;15              Font myFont = new Font("MS Sans Serif", 12);           16              using (Bitmap bmp = new Bitmap(10, 10))17              {18                  using (Graphics g = Graphics.FromImage(bmp))19                  {20                      SizeF size = g.MeasureString(text, myFont, 5000);21                      ImageSize.Width = (int)size.Width + 1;22                      ImageSize.Height = (int)size.Height + 1;23                  }24              }            25              using (Bitmap bmp = new Bitmap(ImageSize.Width, ImageSize.Height))26              {                27                  using (Graphics g = Graphics.FromImage(bmp))28                  {29                      g.Clear(Color.White);30                      using (StringFormat f = new StringFormat())31                      {32                          f.Alignment = StringAlignment.Near;33                          f.LineAlignment = StringAlignment.Center;34                          f.FormatFlags = StringFormatFlags.NoWrap;35                          g.DrawString(36                              text,37                              myFont,38                              Brushes.Black,39                              new RectangleF(40                              0,41                              0,42                              ImageSize.Width,43                              ImageSize.Height),44                              f);45                      }46                  }                47                  int num = ImageSize.Width * ImageSize.Height * 30 / 100;48                  for (int iCount = 0; iCount < num; iCount++)49                  {                    50                      int x = rand.Next(ImageSize.Width);51                      int y = rand.Next(ImageSize.Height);52                      int r = rand.Next(255);53                      int g = rand.Next(255);54                      int b = rand.Next(255);55                      Color c = Color.FromArgb(r, g, b);56                      bmp.SetPixel(x, y, c);57                  } 58                  System.IO.MemoryStream ms = new System.IO.MemoryStream();59                  bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);60                  this.Response.ContentType = "image/png";61                  ms.WriteTo(this.Response.OutputStream);62                  ms.Close();63              }64              myFont.Dispose();65          }

  1 验证码样式五  2      static string[] FontItems = new string[]   3      {   4           "Arial",   5            "Helvetica",   6            "Geneva",   7            "sans-serif",   8            "Verdana"   9      }; 10      static Brush[] BrushItems = new Brush[]  11      {  12            Brushes.OliveDrab,  13            Brushes.ForestGreen,  14            Brushes.DarkCyan,  15            Brushes.LightSlateGray,  16            Brushes.RoyalBlue,  17            Brushes.SlateBlue,  18            Brushes.DarkViolet,  19            Brushes.MediumVioletRed,  20            Brushes.IndianRed,  21            Brushes.Firebrick,  22            Brushes.Chocolate,  23            Brushes.Peru,  24            Brushes.Goldenrod  25      }; 26      static string[] BrushName = new string[]  27      {  28            "OliveDrab",  29            "ForestGreen",  30            "DarkCyan",  31            "LightSlateGray",  32            "RoyalBlue",  33            "SlateBlue",  34            "DarkViolet",  35            "MediumVioletRed",  36            "IndianRed",  37            "Firebrick",  38            "Chocolate",  39            "Peru",  40            "Goldenrod"  41      }; 42      private static Color BackColor = Color.White; 43      private static Pen BorderColor = Pens.DarkGray; 44      private static int Width = 50; 45      private static int Height = 20; 46      private Random _random; 47      private string _code; 48      private int _brushNameIndex; 49   50      public void Page_Load(object sender, System.EventArgs e) 51      { 52          if (!IsPostBack) 53          {             54              // TODO : initialize  55              this._random = new Random(); 56              this._code = GetRandomCode(); 57   58              // TODO : use Session["code"] save the VerifyCode  59              Session["code"] = this._code; 60   61              // TODO : output Image  62              this.SetPageNoCache(); 63              this.OnPaint(); 64          } 65      } 66   67      //设置页面不被缓存  68      private void SetPageNoCache() 69      { 70          Response.Buffer = true; 71          Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1); 72          Response.Expires = 0; 73          Response.CacheControl = "no-cache"; 74          Response.AppendHeader("Pragma", "No-Cache"); 75      } 76       77      //取得一个 4 位的随机码  78      private string GetRandomCode() 79      { 80          return Guid.NewGuid().ToString().Substring(0, 4); 81      } 82   83      //随机取一个字体  84      private Font GetFont() 85      { 86          int fontIndex = _random.Next(0, FontItems.Length); 87          FontStyle fontStyle = GetFontStyle(_random.Next(0, 2)); 88          return new Font(FontItems[fontIndex], 12, fontStyle); 89      } 90       91      //取一个字体的样式  92      private FontStyle GetFontStyle(int index) 93      { 94          switch (index) 95          { 96              case 0: 97                  return FontStyle.Bold; 98              case 1: 99                  return FontStyle.Italic;100              default:101                  return FontStyle.Regular;102          }103      }104      105      //随机取一个笔刷 106      private Brush GetBrush()107      {108          int brushIndex = _random.Next(0, BrushItems.Length);109          _brushNameIndex = brushIndex;110          return BrushItems[brushIndex];111      }112  113  114      //绘画事件 115      private void OnPaint()116      {117          Bitmap objBitmap = null;118          Graphics g = null;119          try120          {121              objBitmap = new Bitmap(Width, Height);122              g = Graphics.FromImage(objBitmap);123              Paint_Background(g);124              Paint_Text(g);125              Paint_TextStain(objBitmap);126              Paint_Border(g);127              objBitmap.Save(Response.OutputStream, ImageFormat.Gif);128              Response.ContentType = "image/gif";129          }130          catch { }131          finally132          {133              if (null != objBitmap)134                  objBitmap.Dispose();135              if (null != g)136                  g.Dispose();137          }138      }139  140  141      //绘画背景颜色 142      private void Paint_Background(Graphics g)143      {144          g.Clear(BackColor);145      }146   147      //绘画边框    148      private void Paint_Border(Graphics g)149      {150          g.DrawRectangle(BorderColor, 0, 0, Width - 1, Height - 1);151      }152    153      //绘画文字   154      private void Paint_Text(Graphics g)155      {156          g.DrawString(_code, GetFont(), GetBrush(), 3, 1);157      }158      159      //绘画文字噪音点    160      private void Paint_TextStain(Bitmap b)161      {162          for (int n = 0; n < 30; n++)163          {164              int x = _random.Next(Width);165              int y = _random.Next(Height);166              b.SetPixel(x, y, Color.FromName(BrushName[_brushNameIndex]));167          }168      }


 

原创粉丝点击