1.生成验证码类

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Web.Mvc;
  6. using System.IO;
  7. using System.Drawing;
  8. using System.Web;
  9.  
  10. namespace SimpleNews.FrontEnd
  11. {
  12. public class ToolController : MyControllerBase
  13. {
  14. /// <summary>
  15. /// 生成验证码字符串
  16. /// </summary>
  17. /// <param name="codeLen">验证码字符长度</param>
  18. /// <returns>返回验证码字符串</returns>
  19. private static string MakeCode(int codeLen)
  20. {
  21. if (codeLen < )
  22. {
  23. return string.Empty;
  24. }
  25. int number;
  26. StringBuilder sbCheckCode = new StringBuilder();
  27. Random random = new Random();
  28.  
  29. for (int index = ; index < codeLen; index++)
  30. {
  31. number = random.Next();
  32.  
  33. if (number % == )
  34. {
  35. sbCheckCode.Append((char)('' + (char)(number % ))); //生成数字
  36. }
  37. else
  38. {
  39. sbCheckCode.Append((char)('A' + (char)(number % ))); //生成字母
  40. }
  41. }
  42. return sbCheckCode.ToString();
  43. }
  44.  
  45. ///<summary>
  46. /// 获取验证码图片流
  47. /// </summary>
  48. /// <param name="checkCode">验证码字符串</param>
  49. /// <returns>返回验证码图片流</returns>
  50. public static MemoryStream CreateCodeImg(string checkCode)
  51. {
  52. if (string.IsNullOrEmpty(checkCode))
  53. {
  54. return null;
  55. }
  56. Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), );
  57. Graphics graphic = Graphics.FromImage(image);
  58. try
  59. {
  60. Random random = new Random();
  61. graphic.Clear(Color.White);
  62. int x1 = , y1 = , x2 = , y2 = ;
  63. for (int index = ; index < ; index++)
  64. {
  65. x1 = random.Next(image.Width);
  66. x2 = random.Next(image.Width);
  67. y1 = random.Next(image.Height);
  68. y2 = random.Next(image.Height);
  69.  
  70. graphic.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
  71. }
  72. Font font = new Font("Arial", , (FontStyle.Bold | FontStyle.Italic));
  73. System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(, , image.Width, image.Height), Color.Red, Color.DarkRed, 1.2f, true);
  74. graphic.DrawString(checkCode, font, brush, , );
  75.  
  76. int x = ;
  77. int y = ;
  78.  
  79. //画图片的前景噪音点
  80. for (int i = ; i < ; i++)
  81. {
  82. x = random.Next(image.Width);
  83. y = random.Next(image.Height);
  84.  
  85. image.SetPixel(x, y, Color.FromArgb(random.Next()));
  86. }
  87. //画图片的边框线
  88. graphic.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
  89. //将图片验证码保存为流Stream返回
  90. System.IO.MemoryStream ms = new System.IO.MemoryStream();
  91. image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
  92. return ms;
  93. }
  94. finally
  95. {
  96. graphic.Dispose();
  97. image.Dispose();
  98. }
  99. }
  100.  
  101. /// <summary>
  102. /// 获取验证码
  103. /// </summary>
  104. /// <returns></returns>
  105. public ActionResult GetValidateCode()
  106. {
  107. string code = MakeCode();
  108. Session["ValidateCode"] = code;
  109. MemoryStream ms = CreateCodeImg(code);
  110. return File(ms.ToArray(), @"image/jpeg");
  111. }
  112.  
  113. }
  114. }

2.前端Html页面

  1. <span>验证码:<input name="ValidateCode" type="text" value="" class="input2" id="txtValidateCode" size="" maxlength="" >
  2. <img src="../Tool/GetValidateCode" style="cursor: pointer;" name="checkcode" border=""
  3. id="valiCode" alt="验证码" class="Ysm" />
  4. </span>
  1. $(function () {
  2. $("#valiCode").bind("click", function () {
  3. this.src = "../Tool/GetValidateCode?time=" + (new Date()).getTime();
  4. });
  5. });

3.后台验证输入的验证码

  1. string validateCode = (string)Request.Form["ValidateCode"]??"";
  2. if (string.IsNullOrEmpty(validateCode))
  3. {
  4. ModelState.AddModelError("validateCodeError","验证码错误!");
  5. return View();
  6. }
  7. if (Session["ValidateCode"]!=null&&Session["ValidateCode"].ToString().ToLower() != validateCode.ToLower())
  8. {
  9. ModelState.AddModelError("validateCodeError", "验证码错误!");
  10. return View();
  11. }

Asp.net mvc生成验证码的更多相关文章

  1. (一)【转】asp.net mvc生成验证码

    网站添加验证码,主要为防止机器人程序批量注册,或对特定的注册用户用特定程序暴力破解方式,以进行不断的登录.灌水等危害网站的操作.验证码被广泛应用在注册.登录.留言等提交信息到服务器端处理的页面中.   ...

  2. ASP.NET MVC 生成验证码

    using System.Web.Mvc; using System.Drawing; using System; using System.Drawing.Imaging; using Models ...

  3. ASP.Net MVC 生成安全验证码

    ---------html <td>验证码:</td>            <td>                <img src="/Logi ...

  4. ASP.NET MVC生成安全验证码

    html部分: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  5. ASP.NET MVC5 生成验证码

    1 ValidateCode.cs using System; using System.Drawing; using System.Drawing.Drawing2D; using System.D ...

  6. C#工具:ASP.NET MVC生成图片验证码

    1.复制下列代码,拷贝到控制器中. #region 生成验证码图片 // [OutputCache(Location = OutputCacheLocation.None, Duration = 0, ...

  7. ASP.NET MVC 生成EML文件

    需求: 点发送邮件按钮的时候, 自动在客户端电脑打开默认邮件的窗口,并且把内容和附件都附加上去. 解决方案: 尝试使用过Microsoft.Office.Interop.Outlook 和 MPAI. ...

  8. asp.net mvc 生成条形码

    using System; using System.Collections; using System.Collections.Generic; using System.Drawing; usin ...

  9. Asp.net MVC 生成zip并下载

    前面有生成Excel或Word的示例,所以就不再重新写了. 这里只提供将指定文件以ZIP的方式下载. 创建一个 Zip工具类 public class ZIPCompressUtil { public ...

随机推荐

  1. Non-ASCII characters are not allowed outside of literals and identifiers

    出现这种问题,一般是在代码里面非注释的地方,出现了非ascii字符. 比较常见的情况是,在代码中出现了中文字符.比如在引用字符串时,用了中文的引号.或者在一行代码结尾处,使用了中文的分号. 这种问题在 ...

  2. 一个可以设置所有子控件是否可以点击的Layout的实现

    http://www.cnblogs.com/csonezp/p/4956315.html 最近在做一个功能,想在某个状态设置整个界面不可点击,后台任务执行完毕后再可以点击. 最直观的想法是直接让所有 ...

  3. AndroidManifest.xml

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

  4. 【原】安装mongo的php插件

    http://pecl.php.net/package/mongo https://github.com/mongodb/mongo-php-driver/tarball/master 1. 安装mo ...

  5. myeclipse自动排版

    myeclipse代码排版方式有两种: 1. ctr+f 实现自动排版: 2. myeclipse->Preference->Java->Editor->Sava Action ...

  6. python笔记一

    好奇,想一探究竟.安装就出点小问题,win7,64位,一直卡在这里不动了? 只好取消.第二天安装仍是如此. 于是下载Windows6.1-KB2999226-x64.msu,安装,仍卡顿不动: 于是找 ...

  7. Ibatis 测试出SQL

    String sql = Brg.Global.Map.BaseBatis.GetRuntimeSql("select_T_JewelleryProductType", _Mode ...

  8. JS函数arguments数组获得实际传参数个数

    JS与PHP在函数传参方面有点不同,PHP形参与实参个数要匹配,而JS就灵活多了,可以随意传参,实参比形参少或多都不会报错. 实参比形参多不会报错 ? 1 2 3 4 5 function say(a ...

  9. HIS与CIS的区别与联系

    医院的医疗信息系统总体可以分为两类:一类是关于医院管理运作的,另一类是关于临床医疗护理的,即面向医院管理和病人管理,前者被称为HIS(医院信息系统),后者被称为CIS(临床信息系统).HIS是以经济核 ...

  10. 【转载】C++ function、bind和lambda表达式

    本篇随笔为转载,原贴地址:C++ function.bind和lambda表达式. 本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制 ...