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

ASP.NET MVC下的验证码

时间:2015-09-04 07:12:56      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:

好,今天是中国抗战70周年的大阅兵,看完中国炫耀完属于他的武器之后,不由自主的小弟自己在编程方面的实力,是如此的薄弱,这些都是提外话来的,我这样做的目的是让那些看我博客的人不会感到如此的无聊,我知道,看博客是意见很枯燥的事情,我看博客也是很喜欢看看博主写的题外话,很有意思。

但是小弟的文化水平有限,能将的题外话就是那么多,希望大家不要介意哦,我只是一个刚刚毕业的学生,满腔热血的青少年,充满梦想的骚年,我为我自己代言,

上面是在打广告,广告看多了不要介意,

好了,闲话我就不说了,我也说不出了,哈哈,现在就进入我们今天的主题了,就是大名鼎鼎的MVC架构下实现登陆验证码,其实这些代码我也是在网上抄下来的,在这里想跟大家一次来讨论下。

我们先进入到控制器吧:

 public ActionResult CheckCode()
        {
            //生成验证码
            ValidateCode validateCode = new ValidateCode();//这里是我在控制器来新建了一个叫ValidataCode的类,作用是相当的强大,下面我就贴这个类的代码
            string code = validateCode.CreateValidateCode(4);//这里是调用ValidataCode这个类的CrratVAalidataCode方法,这可方法主要就用来返回验证码的字符串,参数4是返回一个4位的字符串
            Session["ValidateCode"] = code;//把返回的字符串加入Sesstion里
            byte[] bytes = validateCode.CreateValidateGraphic(code);//这里也是调用了CreateValidataGraphic的这个方法,返回二进制位的字节,也就是图片的字节数据
            return File(bytes, @"image/jpeg");
        }

  好,我这这里贴出ValidataCode的这里类:

技术分享
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Drawing;
  4 using System.Drawing.Drawing2D;
  5 using System.Drawing.Imaging;
  6 using System.IO;
  7 using System.Linq;
  8 using System.Web;
  9 
 10 namespace _验证码.Controllers
 11 {
 12     public class ValidateCode
 13     {
 14         public ValidateCode()
 15         {
 16         }
 17         /// <summary>
 18         /// 验证码的最大长度
 19         /// </summary>
 20         public int MaxLength
 21         {
 22             get { return 10; }
 23         }
 24         /// <summary>
 25         /// 验证码的最小长度
 26         /// </summary>
 27         public int MinLength
 28         {
 29             get { return 1; }
 30         }
 31         /// <summary>
 32         /// 生成验证码
 33         /// </summary>
 34         /// <param name="length">指定验证码的长度</param>
 35         /// <returns></returns>
 36         public string CreateValidateCode(int length)
 37         {
 38             int[] randMembers = new int[length];
 39             int[] validateNums = new int[length];
 40             string validateNumberStr = "";
 41             //生成起始序列值
 42             int seekSeek = unchecked((int)DateTime.Now.Ticks);
 43             Random seekRand = new Random(seekSeek);
 44             int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
 45             int[] seeks = new int[length];
 46             for (int i = 0; i < length; i++)
 47             {
 48                 beginSeek += 10000;
 49                 seeks[i] = beginSeek;
 50             }
 51             //生成随机数字
 52             for (int i = 0; i < length; i++)
 53             {
 54                 Random rand = new Random(seeks[i]);
 55                 int pownum = 1 * (int)Math.Pow(10, length);
 56                 randMembers[i] = rand.Next(pownum, Int32.MaxValue);
 57             }
 58             //抽取随机数字
 59             for (int i = 0; i < length; i++)
 60             {
 61                 string numStr = randMembers[i].ToString();
 62                 int numLength = numStr.Length;
 63                 Random rand = new Random();
 64                 int numPosition = rand.Next(0, numLength - 1);
 65                 validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
 66             }
 67             //生成验证码
 68             for (int i = 0; i < length; i++)
 69             {
 70                 validateNumberStr += validateNums[i].ToString();
 71             }
 72             return validateNumberStr;
 73         }
 74         /// <summary>
 75         /// 创建验证码的图片
 76         /// </summary>
 77         /// <param name="containsPage">要输出到的page对象</param>
 78         /// <param name="validateNum">验证码</param>
 79         public byte[] CreateValidateGraphic(string validateCode)
 80         {
 81             Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
 82             Graphics g = Graphics.FromImage(image);
 83             try
 84             {
 85                 //生成随机生成器
 86                 Random random = new Random();
 87                 //清空图片背景色
 88                 g.Clear(Color.White);
 89                 //画图片的干扰线
 90                 for (int i = 0; i < 25; i++)
 91                 {
 92                     int x1 = random.Next(image.Width);
 93                     int x2 = random.Next(image.Width);
 94                     int y1 = random.Next(image.Height);
 95                     int y2 = random.Next(image.Height);
 96                     g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
 97                 }
 98                 Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
 99                 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
100                  Color.Blue, Color.DarkRed, 1.2f, true);
101                 g.DrawString(validateCode, font, brush, 3, 2);
102                 //画图片的前景干扰点
103                 for (int i = 0; i < 100; i++)
104                 {
105                     int x = random.Next(image.Width);
106                     int y = random.Next(image.Height);
107                     image.SetPixel(x, y, Color.FromArgb(random.Next()));
108                 }
109                 //画图片的边框线
110                 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
111                 //保存图片数据
112                 MemoryStream stream = new MemoryStream();
113                 image.Save(stream, ImageFormat.Jpeg);
114                 //输出图片流
115                 return stream.ToArray();
116             }
117             finally
118             {
119                 g.Dispose();
120                 image.Dispose();
121             }
122         }
123         /// <summary>
124         /// 得到验证码图片的长度
125         /// </summary>
126         /// <param name="validateNumLength">验证码的长度</param>
127         /// <returns></returns>
128         public static int GetImageWidth(int validateNumLength)
129         {
130             return (int)(validateNumLength * 13.0);
131         }
132         /// <summary>
133         /// 得到验证码的高度
134         /// </summary>
135         /// <returns></returns>
136         public static double GetImageHeight()
137         {
138             return 25.5;
139         }
140     }
141 }
ValidataCode

下面是View的代码了,这个很简单,我相信了解过MVC的同学都是知道的,我就不详细说了。

<form action="Home/Index" method="post">
   
   输入验证码:<input type="text" name="CustomerName" />   
    <img id="valiCode" src="~/Home/CheckCode" alt="验证码" />

    <p><input type="submit" value="提交" /></p>
</form>

  接下来就是验证验证码了,我用得是form表单的形式,提交到控制器来,这个大家都会了吧,我在这里就不写验证方法了,如果大家对form表单不熟的话,就尽情的来呼唤小弟来写写吧,毕竟小弟的文笔不好,哈哈,好,写到这里就算是写完了,看懂了的,没看懂的,我都希望各位能一起来讨论下技术方面的东西,第一次写博客,我想弱弱的问问,在这里留下手机号码和QQ号码会怎么样的,会坐牢的吗,管他呢,731354518,哈哈,你们懂的

ASP.NET MVC下的验证码

标签:

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

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