在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下显示正 ...
随机推荐
- 校园网搭建HUSTOJ记录
上学期和网管中心的老师说过很多次--要在校园网上搭OJ,当时那边老师说要等"虚拟化搞好了以后才能搭".直到上周,终于在校园网上申请到了一个虚拟主机,4核,10G内存,100G硬盘, ...
- c/c++ string.h
操作数的都是 ( char * )型,操作时不考虑末尾的'\0',操作数必须是指向字符串的指针("a"),不能是字符('a'). size_t strlen( const char ...
- jquery检测浏览器类型
使用jquery如下代码检测浏览器版本时:出问题,在检测IE浏览器,如果版本是IE11时,会出现 $.browser.msie的返回值是false,$.browser.mozilla的返回值是true ...
- nmon的安装
安装 mkdir /usr/local/nmon cd /usr/local/nmon wget http://sourceforge.net/projects/nmon/files/nmon_lin ...
- 使用tomact监控应用服务器的性能
第一步:在D:\apache-tomcat-7.0.63\conf 配置目录找到tomcat-users.xml 打开添加用户角色及权限 第二步:重启tomact 第三步:浏览器上打开http://1 ...
- 51nod1228 序列求和(自然数幂和)
与UVA766 Sum of powers类似,见http://www.cnblogs.com/IMGavin/p/5948824.html 由于结果对MOD取模,使用逆元 #include<c ...
- [译]:Orchard入门——给网站添加新博客
原文链接:Adding a Blog to Your Site 文章内容基于Orchard 1.8版本 Orchard提供一个博客引擎--这让添加一个新博客到你网站变得非常容易. 本文将介绍怎样添加一 ...
- JavaScript中两个感叹号的作用
先用一个简单的例子说明:var o={flag:true};var test=!!o.flag;//等效于var test=o.flag||false;alert(test);由于对null与unde ...
- C#将数据大小字节转换为MB,GB,TB
http://www.myluoluo.com/c%E5%B0%86%E6%95%B0%E6%8D%AE%E5%A4%A7%E5%B0%8F%E5%AD%97%E8%8A%82%E8%BD%AC%E6 ...
- EventBus 一
一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...