Dos.Captcha安装地址:https://www.nuget.org/packages?q=dos.captcha
很久以前就在使用WebForm下面的一款验证码控件:SuperAuthenticationCode。但此验证码控件并不支持mvc,并且6年没更新了,也联系不到作者,所以抽了点时间将它反编译,修复一些Bug,支持mvc等升级优化,仍然支持WebForm,保留了所有的参数设置。
由于SuperAuthenticationCode本身并不开源,因此Dos.Captcha也不开源,对源码感兴趣的朋友可以直接反编译SuperAuthenticationCode或Dos.Captcha。
SuperAuthenticationCode相关介绍
1、SuperAuthenticationCode作者:http://blog.csdn.net/HHTecShare/article/details/6479449
2、该验证码控件的制作借鉴了网上一款名为“AuthCode”的控件,作者不详。
3、图像扭曲变形算法参考了“ChineseVerifyCode”验证码的方式,作者18470590,下载地址http://www.51aspx.com/CV/ChineseVerifyCode/
4、动态图像的编码使用了开源GIF编码器NGif,作者gOODiDEA.NET,下载地址http://www.codeproject.com/KB/GDI-plus/NGif.aspx
上几张验证码效果图:
升级日志:
*)支持mvc。
*)修复不能设置字体集的bug。
*)增加自定义验证码SessionName。
*)修改一些参数名称。
*)修复NGif数组溢出bug。
*)修复反编译后Bug。
*)修改一些参数默认值。
*)修改一些类名、方法名。
*)等等(将持续更新升级)...
Mvc用法(服务器端):
public class HomeController : Controller { public ActionResult Index() { //初始化Session,否则客户端不会生成ASP.NET_SessionId的Cookie,也将导致session直接丢失。 HttpContext.Session.Add("test", ""); return View(); } public ActionResult CaptchaImage() { #region 一些测试设置 var config = new CaptchaControl(); //背景是否动态 config.IsBackgroundDynamic = true; //验证码是否动态 config.IsForegroundDynamic = true; config.Height = 50; config.Width = 150; //设置字体 config.Fonts = new List<CaptchaFontArrayItem>() { new CaptchaFontArrayItem(new Font("Broadway",1)), new CaptchaFontArrayItem(new Font("Cooper Black",1)) }; //背景颜色 config.BackColor = Color.Bisque; #endregion var h = new Captcha(); var imageStream = new MemoryStream(); string str = h.GenerateCaptchaImage(imageStream); h.ProcessRequest(); return View(); } public JsonResult Check(string Captcha) { try { var cc = new CaptchaControl(); //HttpContext.Session[cc.SessionName] == null if (cc.CaptchaIsExpires()) { return Json("验证码session已失效!"); } //HttpContext.Session[cc.SessionName].ToString().ToUpper() == Captcha.ToUpper() if (cc.CaptchaValidate(param.Captcha)) { return Json("验证码输入正确!"); } return Json("验证码输入错误!正确值:" + HttpContext.Session[new CaptchaControl().SessionName] + "。您输入的值:" + Captcha); } catch (Exception ex) { return Json(ex.Message); } } }
Mvc用法(前端):
<html> <head> <title>Index</title> <script src="~/Scripts/jquery.min.js"></script> </head> <body> <div> <input type="text" placeholder="请输入验证码" id="txtCaptcha"/> <img alt="点击图片更换验证码" title="点击图片更换验证码" src="/Home/CaptchaImage" onclick="this.src = '/Home/CaptchaImage?id=' + new Date().getTime()" style="cursor: pointer; -webkit-user-select: none"> <p><input type="button" value="提交" onclick="Check()"/></p> </div> <script type="text/javascript"> function Check() { $.post("/Home/Check", { Captcha: $("#txtCaptcha").val() }, function (result) { alert(result); }); } </script> </body> </html>
效果:
参数说明
1) Width和Height:控件宽度和高度,这个值不仅决定了控件的尺寸,也决定了验证码字符的大小。当控件高度大于宽度时,验证码字符将纵向排列。
2) ExpireTime:验证码的有效期,当超过这个时间后,即使用户的输入正确,也将无法通过验证(您亦可以自定义验证方法)。
3) IsCaseSensive:是否大小写敏感,这个设置将对验证方式产生影响,同样,如果自定义验证方法,此设置项无效。
4) AllowCharRotation:是否允许字符旋转,当此值为真时,产生的验证码字符会被做旋转形变。
5) AllowDistortion:是否允许扭曲字符,当此值为真时,产生的验证码字符会被做扭曲形变。
6) BackColor:控件背景色(注:可以设置为透明:“Transparent”,仅对非动态模式有效)。
7) BorderColor:控件边框色。
8) BorderStyle:控件边框样式,有直线、虚线等多种。
9) BorderWidth:边框宽度。
10) CharNum:字符数,即生成验证码的字符数量。
11) CodeColorMode:验证码字符颜色填充模式:
l “PURE_COLOR”模式:使用纯色填充,选中此项时将使用ForeColor项中设置的颜色为所有验证码字符填充颜色;
l “RANDOM_COLOR”模式:使用随机色填充每个验证码字符;
l “GRADIENT_COLOR”模式:使用随机渐变色整体填充验证码。
12) CodeFontMode:验证码字符字体模式:
l “FONT_LIMITED”模式:验证码字符所使用的字体将从CodeFonts设置项所限定的字体集中随机选择,如果此项未设置,则使用系统默认字体;
l “FONT_FREE”模式:验证码字符所使用的字体将从系统内置的所有字体中随机选择(注:由于系统内置有图形符号字体,选择此项可能使生成的验证码图片包含不可辨认字符)。
13) CodeFonts:验证码字符字体集,限定生成验证码字符所使用的字体,注意此设置项只有在CodeFontMode项设置为“FONT_LIMITED”时才有效。
14) CodeFontSizeMode:验证码字符字号模式:
l “SIZE_FIXED”:固定字号模式,所有验证码字符均使用控件尺寸所允许的最大字号;
l “SIZE_VARY”:变化字号模式,每个验证码字符使用随机字号,最小字号为控件尺寸所允许的最大字号的3/5。
15) CodeOpacity:验证码字符不透明度。
16) ContentField:验证码字符的字符集:
l “DIGIT_ONLY”:纯数字模式:生成的验证码字符仅包含数字;
l “LETTER_ONLY”:纯字母模式:生成的验证码字符仅包含英文字母(大小写均有);
l “DIGIT_AND_LETTER”:数字、字母混合模式:生成的验证码字符包含数字和字母(注:不包含数字“1”和字母“l”以及数字“0”和字母“O”等容易混淆的字符);
l “CN_CHAR_ONLY”:中文模式:生成的验证码字符仅包含简体中文汉字;
l “JP_CHAE_ONLY”:日文模式:生成的验证码字符仅包含日语假名(平假名和片假名均有)。
(注意:选择后两者,要求网站运行的服务器安装有GB2312字符集,Windows中文操作系统默认已安装。)
17) ForeColor:前景色,即验证码字符的颜色,此设置项仅在CodeColorMode项设置为“PURE_COLOR”时有效。
18) IsBackgroundDynamic:背景是否为动态,此项值为真时,生成的验证码图片背景是动态的。
19) IsForegroundDynamic:前景是否为动态,此项值为真时,生成的验证码图片前景(验证码字符)是动态的。
20) NoiseMode:验证码图片噪化程度设置:
l HIGH_NOISY:高噪化度:生成的验证码图片包含前景线噪声、背景线噪声及背景点噪声;
l MIDDLE_NOISY:中等噪化度:生成的验证码图片包含背景线噪声及背景点噪声;
l LOW_NOISY:低噪化度:生成的验证码图片仅包含背景点噪声;
l NONE:生成的验证码图片未经噪化处理。
(注:噪化图像是为了防止机器识别验证码。如果验证码控件尺寸比较小,过高的噪化度可能给用户识别也带来困难。)
21) TooTip:在页面中鼠标移过验证码图片时的提示信息,当获取验证码失败时也将显示此信息;
22) LivePreview:开启或关闭验证码图片设计时预览,由于验证码图片是实时生成的,这可能在一定程度上影响页面的设计时性能(特别是当验证码图片尺寸比较大时),通过此设置项您可以选择开启或关闭设计时预览支持:
l ON:开启验证码图片设计时预览;
l OFF:关闭验证码图片设计时预览。
WebForm用法和以前一致。
未完待续...
文章链接:http://www.iTdos.com/CSharp/201605/31235542634.html
原创说明:转载IT大师原创文章时请保留原文链接,谢谢!
转载说明:本站转载文章均标明文章来源,若本篇转载侵犯了您的权益,请联系站长删除!
交流Q群:60831381
开源组件:Dos.ORM数据库组件