在mvc中实现图片验证码的刷新
首先,在项目模型(Model)层中建立一个生成图片验证码的类ValidationCodeHelper,代码如下:
public class ValidationCodeHelper
{
//用户存取验证码字符串
public string validationCode = String.Empty;
Random ram = new Random();
Graphics g = null; int bgWidth = ;
int bgHeight = ; public string FontFace = "Consolas";
public int FontSize = ;
public Color foreColor = Color.FromArgb(, , );
public Color backColor = Color.FromArgb(, , );
public Color mixedLineColor = Color.FromArgb(, , );
public int mixedLineWidth = ;
public int mixedLineCount = ; #region 根据指定长度,返回随机验证码
/// <summary>
/// 根据指定长度,返回随机验证码
/// </summary>
/// <param name="length">制定长度</param>
/// <returns>随即验证码</returns>
public string Next(int length)
{
this.validationCode = GetRandomCode(length);
return this.validationCode;
}
#endregion #region 根据指定长度及背景图片样式,返回带有随机验证码的图片对象
/// <summary>
/// 根据指定长度及背景图片样式,返回带有随机验证码的图片对象
/// </summary>
/// <param name="length">指定长度</param>
/// <param name="hatchStyle">背景图片样式</param>
/// <returns>Image对象</returns>
public Image NextImage(int length, bool allowMixedLines,out string code)
{
this.validationCode = GetRandomCode(length);
code = this.validationCode;
//System.Web.HttpContext.Current.Session["Code"] = validationCode;
//校验码字体
Font myFont = new Font(FontFace, FontSize); //根据校验码字体大小算出背景大小
bgWidth = (int)myFont.Size * length + ;
bgHeight = (int)myFont.Size * ;
//生成背景图片
Bitmap myBitmap = new Bitmap(bgWidth, bgHeight); g = Graphics.FromImage(myBitmap); this.DrawBackground();
this.DrawValidationCode(this.validationCode, myFont);
if (allowMixedLines)
this.DrawMixedLine(); return (Image)myBitmap;
}
#endregion #region 内部方法:绘制验证码背景
private void DrawBackground( )
{
//设置填充背景时用的笔刷
HatchBrush hBrush = new HatchBrush(HatchStyle.Wave, backColor); //填充背景图片
g.FillRectangle(hBrush, , , this.bgWidth, this.bgHeight);
}
#endregion #region 内部方法:绘制验证码
private void DrawValidationCode(string vCode, Font font)
{
g.DrawString(vCode, font, new SolidBrush(this.foreColor), , );
}
#endregion #region 内部方法:绘制干扰线条
/// <summary>
/// 绘制干扰线条
/// </summary>
private void DrawMixedLine()
{
for (int i = ; i < mixedLineCount; i++)
{
g.DrawBezier(
new Pen(new SolidBrush(mixedLineColor),mixedLineWidth),
RandomPoint(),
RandomPoint(),
RandomPoint(),
RandomPoint()
);
}
}
#endregion #region 内部方法:返回指定长度的随机验证码字符串
/// <summary>
/// 根据指定大小返回随机验证码
/// </summary>
/// <param name="length">字符串长度</param>
/// <returns>随机字符串</returns>
private string GetRandomCode(int length)
{
StringBuilder sb = new StringBuilder(); for (int i = ; i < length; i++)
{
sb.Append(Char.ConvertFromUtf32(RandomAZ09()));
} return sb.ToString();
}
#endregion #region 内部方法:产生随机数和随机点 /// <summary>
/// 产生0-9A-Z的随机字符代码
/// </summary>
/// <returns>字符代码</returns>
private int RandomAZ09()
{
//Thread.Sleep(15);
int result = ; int i = ram.Next(); switch (i)
{
case :
result = ram.Next(, );
break;
case :
result = ram.Next(, );
break;
} return result;
} /// <summary>
/// 返回一个随机点,该随机点范围在验证码背景大小范围内
/// </summary>
/// <returns>Point对象</returns>
private Point RandomPoint()
{
//Thread.Sleep(15); Point point = new Point(ram.Next(this.bgWidth), ram.Next(this.bgHeight));
return point;
}
#endregion
}
然后,在控制器(Controller)中创建一个控制器名称为ValidateCodeImgController的.cs文件,写入以下方法。
这个方法用来返回一个图像对象:
public ActionResult Get()
{
ValidationCodeHelper vCode = new ValidationCodeHelper();
string code;
Image imgcode = vCode.NextImage(,true,out code); //设置临时数据字典进行储存
this.TempData["Code"] = code; //创建存储区为内存的流(关闭程序后,数据会被自动回收)
MemoryStream ms = new MemoryStream(); //将此图像以指定的格式保存到指定的流中
imgcode.Save(ms,ImageFormat.Gif); this.Response.ContentType = "image/gif";
this.Response.BinaryWrite(ms.ToArray());
ms.Close();
imgcode.Dispose(); return new EmptyResult();
}
最后,视图(View)中显示:
js代码:
<script type="text/javascript">
function imgCodes() {
$("#valiCode").attr("src", '@Url.Action("Get", "ValidateCodeImg")'+"?time="+(new Date()).getTime());
}
</script>
html代码:
<td height="" class="login-text02">
验证码:<br />
</td>
<td>
<div style="width:400px;">
<input type="text" name="txtCheck" />
<img id="valiCode" style="cursor: pointer;" src="/ValidateCodeImg/Get" title="看不清,点击换一张" alt="看不清?请点我" onclick="imgCodes(this);" />
<a href="javascript:imgCodes();">看不清楚,点击这里</a> </div>
</td>
显示效果如下图:

注意:根据这段html代码,刷新图片验证码,可以直接点击验证码图片也可以点击a标签。
在mvc中实现图片验证码的刷新的更多相关文章
- Spring mvc 中使用 kaptcha 验证码
生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的开源项目.使用Kaptcha 生成验证码十分简单并且参数可以进行自定义.只需添加jar包配置下就可 ...
- django项目登录中使用图片验证码
应用下创建untils文件夹放置封装图片验证码的函数 创建validCode.py文件定义验证码规则 import random def get_random_color(): return (ran ...
- Struts2中的图片验证码
1.Struts中建一个action <action name="Code" class="LoginAction" method="code& ...
- MVC伪一个12306图片验证码
本文的来由主要是满足自己的好奇心,而不是证明什么东西,如果涉及到什么官方性的事情,麻烦通知我谢谢:本篇将要和大家分享的是一个看起来通12306图片验证码相似的效果,这篇应该是今年农历最后一篇分享文章了 ...
- ASP.NET图片验证码
1. 新建一个Validate.aspx,然后在Validate.aspx.cs编写代码: using System; using System.Collections; using System.C ...
- ASP.NET图片验证码学习!
1. 新建一个Validate.aspx,然后在Validate.aspx.cs编写代码: using System; using System.Collections; using System.C ...
- Django实战(一)-----用户登录与注册系统5(图片验证码)
为了防止机器人频繁登录网站或者破坏分子恶意登录,很多用户登录和注册系统都提供了图形验证码功能. 验证码(CAPTCHA)是一种区分用户是计算机还是人的公共全自动程序. 可以防止恶意破解密码.刷票.论坛 ...
- Django商城项目笔记No.4用户部分-注册接口-图片验证码
Django商城项目笔记No.4用户部分-注册接口-图片验证码 1.首先分析注册业务接口 1.1.分析可得,至少这么几个接口 图片验证码 短信验证码 用户名是否存在 手机号是否存在 整体注册接口 图片 ...
- linux下tomcat6无法显示图片验证码 少了图形插件
linux下tomcat6无法显示图片验证码(windows下显示正常) 原创 2015年10月20日 10:31:47 3526 linux下tomcat6无法显示图片验证码(windows下显示正 ...
随机推荐
- java 处理XML(dom4j-1.6.1)
java 处理XML(dom4j-1.6.1) Java 处理xml有很多框架,今天使用主流框架dom4j-1.6.1 下载地址:http://www.dom4j.org/dom4j-1.6.1/ D ...
- Scrapy003-项目流程
Scrapy003-项目流程 @(Spider)[POSTS] 前两篇文章我们了解到Scrapy的原理和安装的相关知识,这节就需要知道创建项目流程的小知识. 根据官方文档:http://scrapy- ...
- winfrom获取用户控件里的控件对象
如何获取用户控件里的控件对象呢,其实思路也是很简单的, 比如有一个panel 用户控件 里面有许多的其他控件. 那么要找出一个Label控件怎么找呢,好的.现在我们就开始 首先,一个foreach循环 ...
- Android adapter适配器的学习
学习Android有一点时间,说说自己的学习感悟. 首先呢,先说说适配器的作用,顾名思义,它就是把数据定义好一定的规则,使得我们可以用到ListView GridView等上面 所以说这玩意,还是得好 ...
- 无法打开之前cuda的vs项目,打开之后变灰色
解决办法: 打开convolution_vs2010.vcxproj文件,将之前cuda 5.5全部改成cuda7.5. 就可以打开了.
- ASP.NET知识总结(2.对比Get和Post提交方式)
2.对比Get和Post提交方式 get:<1>在地址栏中通过?key1=value1&key2=value2...的方式传值 <2>传递的数据用户可以直接在url中看 ...
- oracle数据库安装完要做的事情。
安装数据库客户端.这个在oracle官网可以下载安装(下载链接) 安装PL/SQL PL在下载 配置环境变量(这个比较重要,不配置PLSQL链接不到数据库) 配置的相关环境变量有: 变量名:oracl ...
- EXPORT_SYMBOL的使用
转自:http://blog.csdn.net/cailiwei712/article/details/7998525 在查看内核驱动代码的时候会经常看到在一些函数后面总会跟EXPORT_SYMBOL ...
- Linux常用命令学习3---(文件的压缩和解压缩命令zip unzip tar、关机和重启命令shutdown reboot……)
1.压缩和解压缩命令 常用压缩格式:.zip..gz..bz2..tar.gz..tar.bz2..rar .zip格式压缩和解压缩命令 zip 压缩文件名 源文件:压缩文件 ...
- [C++11][数据结构]自己的双链表实现
这个双链表,是我模仿stl的list制作的,只实现了一些基本功能,像merge,transfer这些就没有实现,用户可以用基本操作来自己做外部实现. 我没有选用stl的[begin,end)迭代器模式 ...