首先新建一个MVC项目

添加类:验证码帮助类(ValidateCodeHelper)

using System;
using System.Collections.Generic;
using System.IO; using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging; namespace ValidateCodeDemo
{
public class ValidateCodeHelper
{
/// <summary>
/// 生成验证码
/// </summary>
/// <param name="length">指定验证码的长度</param>
/// <returns></returns>
public static string CreateValidateCode(int length)
{
int[] randMembers = new int[length];
int[] validateNums = new int[length];
string validateNumberStr = "";
//生成起始序列值
int seekSeek = unchecked((int)DateTime.Now.Ticks);
Random seekRand = new Random(seekSeek);
int beginSeek = (int)seekRand.Next(, Int32.MaxValue - length * );
int[] seeks = new int[length];
for (int i = ; i < length; i++)
{
beginSeek += ;
seeks[i] = beginSeek;
}
//生成随机数字
for (int i = ; i < length; i++)
{
Random rand = new Random(seeks[i]);
int pownum = * (int)Math.Pow(, length);
randMembers[i] = rand.Next(pownum, Int32.MaxValue);
}
//抽取随机数字
for (int i = ; i < length; i++)
{
string numStr = randMembers[i].ToString();
int numLength = numStr.Length;
Random rand = new Random();
int numPosition = rand.Next(, numLength - );
validateNums[i] = Int32.Parse(numStr.Substring(numPosition, ));
}
//生成验证码
for (int i = ; i < length; i++)
{
validateNumberStr += validateNums[i].ToString();
}
return validateNumberStr;
} /// <summary>
/// 创建验证码的图片
/// </summary>
/// <param name="validateCode">验证码</param>
public static byte[] CreateValidateGraphic(string validateCode)
{
Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), );
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的干扰线
for (int i = ; i < ; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
Font font = new Font("Arial", , (FontStyle.Bold | FontStyle.Italic));
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(, , image.Width, image.Height),
Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(validateCode, font, brush, , );
//画图片的前景干扰点
for (int i = ; i < ; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
//保存图片数据
MemoryStream stream = new MemoryStream();
image.Save(stream, ImageFormat.Jpeg);
//输出图片流
return stream.ToArray();
}
finally
{
g.Dispose();
image.Dispose();
}
}
}
}

在HomeController中新增两个Action

        public ActionResult ValidateCodeTest()
{
return View();
} public ActionResult GetValidateCode()
{
//获取随机验证码
string code = ValidateCodeHelper.CreateValidateCode();
//将验证码放到Session中以便提交校验
Session["ValidateCode"] = code;
//绘制验证码
byte[] bytes = ValidateCodeHelper.CreateValidateGraphic(code);
//返回验证码image
return File(bytes, @"image/jpeg");
}

第一个返回视图,右击第一个方法名添加视图。

在视图中添加img标签,代码如下:src指向第二个方法。

<img id="valiCode" style="cursor: pointer; margin-bottom: -5px; padding-left: 12px;" src="/Home/GetValidateCode" alt="验证码" />

最后修改默认路由。

        public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "ValidateCodeTest", id = UrlParameter.Optional }
);
}

F5执行结果:

最新文章

  1. 关于生物信息学与R的相关资料和网站
  2. zabbix监控系统客户端安装
  3. css自定义字体完美解决方案example
  4. VpnService
  5. RichEdit 各个版本介绍
  6. [置顶] 浅谈Android的资源编译过程
  7. h5 录音
  8. linux 增量备份命令Rsync 使用详解
  9. KVM 虚拟机 安装配置
  10. SQL Server含逗号分隔的数据匹配维表
  11. SQL MAX() 函数
  12. SAP Parallel Accounting(平行分类账)业务配置及操作手册
  13. 使用JS实现俄罗斯方块游戏
  14. VCL 中的 Windows API 函数(2): ActivateKeyboardLayout
  15. ios开发之--MJRefresh上拉加载的时候,tableview会向上偏移
  16. 复制文件描述符---dup
  17. 在centos docker中安装nvidia驱动
  18. java jar 自启动 centos7 systemctl
  19. SVN的正确提交方式
  20. Android理解:Activity状态和生命周期

热门文章

  1. java-01
  2. MySQL活动期间制定月份注册用户下单情况_20161029
  3. 【Opencv】直方图函数 calchist()
  4. 实现PIX需要参考的标准资料
  5. Python之路:Jquery Ajax的使用
  6. 基于Qt Gui的Led控制显示程序
  7. &lt;正则吃饺子&gt; :关于redis配置文件参数详解
  8. POJ-3669
  9. Eclipse&amp;nbsp;Helios(3.6.2)下载地址
  10. Spring入门第十五课