public class ValidateCode

    {

        /// <summary>

        /// 產生圖形驗證碼。

        /// </summary>

        /// <param name="Code">傳出驗證碼。</param>

        /// <param name="CodeLength">驗證碼字元數。</param>

        /// <param name="Width"></param>

        /// <param name="Height"></param>

        /// <param name="FontSize"></param>

        /// <returns></returns>

        public static byte[] CreateValidateGraphic(out String Code, int CodeLength, int Width, int Height, int FontSize)

        {

            String sCode = String.Empty;

            //顏色列表,用於驗證碼、噪線、噪點

            Color[] oColors ={

             System.Drawing.Color.Black,

             System.Drawing.Color.Red,

             System.Drawing.Color.Blue,

             System.Drawing.Color.Green,

             System.Drawing.Color.Orange,

             System.Drawing.Color.Brown,

             System.Drawing.Color.Brown,

             System.Drawing.Color.DarkBlue

            };

            //字體列表,用於驗證碼

            string[] oFontNames = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" };

            //驗證碼的字元集,去掉了一些容易混淆的字元

            char[] oCharacter = {

       '2','3','4','5','6','8','9',

       'A','B','C','D','E','F','G','H','J','K', 'L','M','N','P','R','S','T','W','X','Y'

      };

            Random oRnd = new Random();

            Bitmap oBmp = null;

            Graphics oGraphics = null;

            int N1 = 0;

            System.Drawing.Point oPoint1 = default(System.Drawing.Point);

            System.Drawing.Point oPoint2 = default(System.Drawing.Point);

            string sFontName = null;

            Font oFont = null;

            Color oColor = default(Color);

//生成驗證碼字串

            for (N1 = 0; N1 <= CodeLength - 1; N1++)

            {

                sCode += oCharacter[oRnd.Next(oCharacter.Length)];

            }

oBmp = new Bitmap(Width, Height);

            oGraphics = Graphics.FromImage(oBmp);

            oGraphics.Clear(System.Drawing.Color.White);

            try

            {

                for (N1 = 0; N1 <= 4; N1++)

                {

                    //畫噪線

                    oPoint1.X = oRnd.Next(Width);

                    oPoint1.Y = oRnd.Next(Height);

                    oPoint2.X = oRnd.Next(Width);

                    oPoint2.Y = oRnd.Next(Height);

                    oColor = oColors[oRnd.Next(oColors.Length)];

                    oGraphics.DrawLine(new Pen(oColor), oPoint1, oPoint2);

                }

float spaceWith = 0, dotX = 0, dotY = 0;

                if (CodeLength != 0)

                {

                    spaceWith = (Width - FontSize * CodeLength - 10) / CodeLength;

                }

for (N1 = 0; N1 <= sCode.Length - 1; N1++)

                {

                    //畫驗證碼字串

                    sFontName = oFontNames[oRnd.Next(oFontNames.Length)];

                    oFont = new Font(sFontName, FontSize, FontStyle.Italic);

                    oColor = oColors[oRnd.Next(oColors.Length)];

dotY = (Height - oFont.Height) / 2 + 2;//中心下移2像素

                    dotX = Convert.ToSingle(N1) * FontSize + (N1 + 1) * spaceWith;

oGraphics.DrawString(sCode[N1].ToString(), oFont, new SolidBrush(oColor), dotX, dotY);

                }

for (int i = 0; i <= 30; i++)

                {

                    //畫噪點

                    int x = oRnd.Next(oBmp.Width);

                    int y = oRnd.Next(oBmp.Height);

                    Color clr = oColors[oRnd.Next(oColors.Length)];

                    oBmp.SetPixel(x, y, clr);

                }

Code = sCode;

                //保存图片数据

                MemoryStream stream = new MemoryStream();

                oBmp.Save(stream, ImageFormat.Jpeg);

                //输出图片流

                return stream.ToArray();

            }

            finally

            {

                oGraphics.Dispose();

            }

        }

    }

//2.2图片流以图片的形式响应到页面

public class ValidateCodeController : Controller

    {

        public ActionResult GetImg()

        {

            int width = ConverterHelper.ObjToInt(Request.Params["width"], 100);

            int height = ConverterHelper.ObjToInt(Request.Params["height"], 40);

            int fontsize = ConverterHelper.ObjToInt(Request.Params["fontsize"], 20);

            string code = string.Empty;

            byte[] bytes = ValidateCode.CreateValidateGraphic(out code, 4, width, height, fontsize);

            SessionHelper.SetValiCode(code);

            return File(bytes, @"image/jpeg");

        }

}

//2.3页面显示及刷新(img+js)

<img id="GL_StandardCode"  style="cursor: pointer;"
src="@Url.Action("GetImg", "ValidateCode")?t=@DateTime.Now.Ticks"
title="看不清,点击换一张" />

$("#GL_StandardCode").click(function () {

                var newSrc = "@Url.Action("GetImg", "ValidateCode")" + "?t=" + (new Date()).getTime();

                this.src=newSrc;

                return false;

            });

//2.4登录时判断SESSION值

string pCode = Request.Params["GL_CodeInput"];

        string sCode = SessionHelper.GetValiCode();

        if (string.IsNullOrEmpty(pCode))

        {

            resultMsg = "请输入验证码";

        }

        else if (string.IsNullOrEmpty(sCode))

        {

            resultMsg = "验证码过期";

        }

        else if (pCode.ToLower() != sCode.ToLower())

        {

            resultMsg = "验证码不正确";

        }

C# mvc 验证码2的更多相关文章

  1. MVC 验证码实现( 简易版)

    现在网站上越来越多的验证码,使用场景也是越来越多,登陆.注册.上传.下载...等等地方,都有可能大量使用到验证码,那么制作验证码到底有多简单呢?我们一起来看下最简易版的验证码实现过程- 验证码的基本步 ...

  2. ASP.NET MVC验证码演示(Ver2)

    前一版本<ASP.NET MVC验证码演示>http://www.cnblogs.com/insus/p/3622116.html,Insus.NET还是使用了Generic handle ...

  3. .NET MVC 验证码

    .NET MVC 验证码

  4. MVC验证码的编写

    主要是相互学习一下mvc,希望各位大神指导 /// <summary> /// 生成随机数字 /// </summary> /// <returns>随机数字< ...

  5. ASP.NET MVC验证码演示

    我们在网站登录或理一个评论时,可以放置一个验证码(Captcha),可以为系统免去那些恶意刷新等功能. 今次Insus.NET在asp.net mvc应用程序实现与演示验证码的产生以及应用等 . 前天 ...

  6. ASP.NET mvc 验证码 (转)

    ASP.net 验证码(C#) MVC http://blog.163.com/xu_shuhao/blog/static/5257748720101022697309/ 网站添加验证码,主要为防止机 ...

  7. mvc验证码图片生成

    /// <summary> ///生成验证码 /// </summary> public class VerifyCode { /// <summary> /// ...

  8. asp.net mvc 验证码

    效果图 验证码类 namespace QJW.VerifyCode { //用法: //public FileContentResult CreateValidate() //{ // Validat ...

  9. 简单C#、asp.net mvc验证码的实现

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text;u ...

  10. C# mvc 验证码3

    //// <summary> /// 生成验证码 /// </summary> /// <param name="length">指定验证码的长 ...

随机推荐

  1. 用Android++在Visual Studio中用C/C++开发Android应用

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Android++在Visual Studio中用C/C++开发Android应用.

  2. 大陆用户如何下载Google Play中的apk文件

    利用一些中转网站完成,具体原理可能是以手机虚拟机形式下载,然后提取app,给出下载链接,不过知不知道原理不重要,反正都是被墙. 这里给出测试可用的网站apkpure(20160714) http:// ...

  3. Ubuntu14.04搭建cocos2dx2.2.5开发环境(超级具体)

    一 下载解压 官方下载地址:http://www.cocos2d-x.org/download 下载下来之后解压完毕之后会得到一个文件夹cocos2d-x-2.2.5 二 编译 1 安装依赖 cd到c ...

  4. float与double的范围和精度(摘录)

    什么是浮点数在计算机系统的发展过程中,曾经提出过多种方法表达实数.典型的比如相对于浮点数的定点数(Fixed Point Number).在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置. ...

  5. PLSQL Developer操作

    1.设置 1)下载32位Oracle InstantClient  2)将Oracle InstantClient解压到某目录  3)设置环境变量(修改NLS_LANG和TNS_ADMIN环境变量)对 ...

  6. H TML5 之 (6)下雨效果

    在对HTML5进行研究之后,有了一点想法,思考出游戏其实感觉就是四个步骤 1.创建一个你需要的对象,赋予属性(一些影响方法的属性),方法(运动,叫....) 2.实例化这个对象,让它成为一个或者多个个 ...

  7. 今天把PHP复习了一下.

    记录一下今天复习内容. $_GET[''] $_POST $_SESSION $_COOKIE 常用的 $var='a'; global 全局变量$GLOBALS[''] $$var (动态变量名的变 ...

  8. Css3 兼容新旧浏览器

    想想10年前用 IE6,火狐,遨游,谷歌等浏览器学习css时,那叫一个艰苦,各种hack各种抓耳挠腮,不是margin塌陷就是元素飞了... 当前借着css3这个东风,如果各大浏览器厂商能统一一下,也 ...

  9. c#中string.trimstart() 和string.trimend() 的用法

    trim(),trimstart(),trimend()这样写是去掉空格,trimstart(a)是去掉字符串开始包含char[] a的字符,trimend同trimstart. 例:char[] a ...

  10. scope的参数范围

    Default -- 显示当前文件夹下的:文件和文件夹 FilesOnly--显示当前文件夹下的:文件 Recursive --显示当前文件夹下的:所有文件,包括子文件夹中的文件 RecursiveA ...