码迷,mamicode.com
首页 > Web开发 > 详细

asp.net mvc 验证码

时间:2014-07-28 15:21:54      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   数据   io   for   cti   

  1 #region  生成验证码图片
  2         //[OutputCache(Location = OutputCacheLocation.None, Duration = 0, NoStore = false)]
  3         public ActionResult SecurityCode()
  4         {
  5 
  6             string oldcode = TempData["SecurityCode"] as string;
  7             string code = CreateRandomCode(5);
  8             TempData["SecurityCode"] = code;
  9             return File(CreateValidateGraphic(code), "image/Jpeg");
 10         }
 11 
 12 
 13         private byte[] CreateImage(string checkCode)
 14         {
 15             int iwidth = (int)(checkCode.Length * 12);
 16             System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
 17             Graphics g = Graphics.FromImage(image);
 18             Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);
 19             Brush b = new System.Drawing.SolidBrush(Color.White);
 20             g.Clear(Color.Blue);
 21             g.DrawString(checkCode, f, b, 3, 3);
 22             Pen blackPen = new Pen(Color.Black, 0);
 23             Random rand = new Random();
 24             for (int i = 0; i < 5; i++)
 25             {
 26                 int x1 = rand.Next(image.Width);
 27                 int x2 = rand.Next(image.Width);
 28                 int y1 = rand.Next(image.Height);
 29                 int y2 = rand.Next(image.Height);
 30                 g.DrawLine(new Pen(Color.Silver, 1), x1, y1, x2, y2);
 31             }
 32             System.IO.MemoryStream ms = new System.IO.MemoryStream();
 33             image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
 34             return ms.ToArray();
 35         }
 36 
 37         private string CreateRandomCode(int codeCount)
 38         {
 39             string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";
 40             string[] allCharArray = allChar.Split(,);
 41             string randomCode = "";
 42             int temp = -1;
 43             Random rand = new Random();
 44             for (int i = 0; i < codeCount; i++)
 45             {
 46                 if (temp != -1)
 47                 {
 48                     rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
 49                 }
 50                 int t = rand.Next(35);
 51                 if (temp == t)
 52                 {
 53                     return CreateRandomCode(codeCount);
 54                 }
 55                 temp = t;
 56                 randomCode += allCharArray[t];
 57             }
 58             return randomCode;
 59         }
 60         /// <summary>
 61         /// 创建验证码的图片
 62         /// </summary>
 63         public byte[] CreateValidateGraphic(string validateCode)
 64         {
 65             Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 16.0), 27);
 66             Graphics g = Graphics.FromImage(image);
 67             try
 68             {
 69                 //生成随机生成器
 70                 Random random = new Random();
 71                 //清空图片背景色
 72                 g.Clear(Color.White);
 73                 //画图片的干扰线
 74                 for (int i = 0; i < 25; i++)
 75                 {
 76                     int x1 = random.Next(image.Width);
 77                     int x2 = random.Next(image.Width);
 78                     int y1 = random.Next(image.Height);
 79                     int y2 = random.Next(image.Height);
 80                     g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
 81                 }
 82                 Font font = new Font("Arial", 13, (FontStyle.Bold | FontStyle.Italic));
 83                 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
 84                  Color.Blue, Color.DarkRed, 1.2f, true);
 85                 g.DrawString(validateCode, font, brush, 3, 2);
 86                 //画图片的前景干扰点
 87                 for (int i = 0; i < 100; i++)
 88                 {
 89                     int x = random.Next(image.Width);
 90                     int y = random.Next(image.Height);
 91                     image.SetPixel(x, y, Color.FromArgb(random.Next()));
 92                 }
 93                 //画图片的边框线
 94                 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
 95                 //保存图片数据
 96                 MemoryStream stream = new MemoryStream();
 97                 image.Save(stream, ImageFormat.Jpeg);
 98                 //输出图片流
 99                 return stream.ToArray();
100             }
101             finally
102             {
103                 g.Dispose();
104                 image.Dispose();
105             }
106         }
107         #endregion

 

asp.net mvc 验证码,布布扣,bubuko.com

asp.net mvc 验证码

标签:style   blog   color   os   数据   io   for   cti   

原文地址:http://www.cnblogs.com/shenlan/p/3872851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!