HtmlHelper of an image verification code. The original call code is as follows:
Copy codeThe Code is as follows:
<Script language = "javascript" type = "text/javascript">
$ (Document). ready (function (){
$ ("# ValidateCode"). bind ("click", function (){
Var url = $ (this). attr ("src ");
Url + = "? "+ Math. random ();
$ (This). attr ("src", url );
});
});
</Script>
Encapsulated as HtmlHelper:
@ Html. ValidateCode ()
The procedure is as follows:
1. Create a verification code Helper
Copy codeThe Code is as follows:
Using System;
Using System. Collections. Generic;
Using System. ComponentModel;
Using System;
Using System. Collections. Generic;
Using System. Diagnostics. CodeAnalysis;
Using System. Globalization;
Using System. Linq. Expressions;
Using System. Security. Policy;
Using System. Text;
Using System. Web;
Using System. Web. Mvc;
Using System. Web. Mvc. Resources;
Using System. Web. Routing;
Namespace MvcApplication1
{
Public static class ValidateCodeHelper
{
Private const string IdPrefix = "validateCode ";
Private const int Length = 4;
Public static MvcHtmlString ValidateCode (this HtmlHelper helper)
{
Return ValidateCode (helper, IdPrefix );
}
Public static MvcHtmlString ValidateCode (this HtmlHelper helper, string id)
{
Return ValidateCode (helper, id, Length );
}
Public static MvcHtmlString ValidateCode (this HtmlHelper helper, string id, int length)
{
Return ValidateCode (helper, id, length, null );
}
Public static MvcHtmlString ValidateCode (this HtmlHelper helper, string id, object htmlAttributes)
{
Return ValidateCode (helper, id, Length, htmlAttributes );
}
Public static MvcHtmlString ValidateCode (this HtmlHelper helper, int length, object htmlAttributes)
{
Return ValidateCode (helper, IdPrefix, length, htmlAttributes );
}
Public static MvcHtmlString ValidateCode (this HtmlHelper helper, object htmlAttributes)
{
Return ValidateCode (helper, 4, htmlAttributes );
}
Public static MvcHtmlString ValidateCode (this HtmlHelper helper, int length)
{
Return ValidateCode (helper, length, null );
}
Public static MvcHtmlString ValidateCode (this HtmlHelper helper, string id, int length, object htmlAttributes)
{
String finalId = id + "_ imgValidateCode ";
Var tagBuild = new TagBuilder ("img ");
TagBuild. GenerateId (finalId );
Var defaultController = (Route) RouteTable. Routes ["Default"]). Defaults ["controller"] + "/";
Var controller = HttpContext. Current. Request. Url. Segments. Length = 1
? Defacontroller Controller
: HttpContext. Current. Request. Url. Segments [1];
TagBuild. MergeAttribute ("src", string. Format ("/{0} GetValidateCode? Length = {1} ", controller, length ));
TagBuild. MergeAttribute ("alt", "cannot see clearly? Click here to try it! ");
TagBuild. MergeAttribute ("style", "cursor: pointer ;");
TagBuild. MergeAttributes (AnonymousObjectToHtmlAttributes (htmlAttributes ));
Var sb = new StringBuilder ();
Sb. Append ("<script language = \" javascript \ "type = \" text/javascript \ "> ");
Sb. Append ("$ (document). ready (function (){");
Sb. AppendFormat ("$ (\" # {0} \ "). bind (\" click \ ", function () {", finalId );
// Sb. Append ("$ (this). attr (\" style \ ", \" cursor: pointer ;\");");
Sb. Append ("var url = $ (this). attr (\" src \");");
Sb. Append ("url + = \" & \ "+ Math. random ();");
Sb. Append ("$ (this). attr (\" src \ ", url );");
Sb. Append ("});");
Sb. Append ("});");
Sb. Append ("</script> ");
Return MvcHtmlString. Create (tagBuild + sb. ToString ());
}
Public static RouteValueDictionary AnonymousObjectToHtmlAttributes (object htmlAttributes)
{
Var result = new RouteValueDictionary ();
If (htmlAttributes! = Null)
{
Foreach (PropertyDescriptor property in TypeDescriptor. GetProperties (htmlAttributes ))
{
Result. Add (property. Name. Replace ('_', '-'), property. GetValue (htmlAttributes ));
}
}
Return result;
}
}
}
2. Code for generating the verification code:
Copy codeThe Code is as follows:
Using System;
Using System. Collections. Generic;
Using System. Linq;
Using System. Web;
Using System. Drawing;
Using System. Drawing. Drawing2D;
Using System. IO;
Using System. Drawing. Imaging;
Namespace MvcApplication1
{
Public class ValidateCode
{
Public ValidateCode ()
{
}
/// <Summary>
/// Maximum length of the Verification Code
/// </Summary>
Public int MaxLength
{
Get {return 10 ;}
}
/// <Summary>
/// Minimum length of the Verification Code
/// </Summary>
Public int MinLength
{
Get {return 1 ;}
}
/// <Summary>
/// Generate the verification code
/// </Summary>
/// <Param name = "length"> specify the length of the Verification Code </param>
/// <Returns> </returns>
Public string CreateValidateCode (int length)
{
Var randMembers = new int [length];
Var validateNums = new int [length];
Var validateNumberStr = "";
// Generate the starting Sequence Value
Var seekSeek = unchecked (int) DateTime. Now. Ticks );
Var seekRand = new Random (seekSeek );
Var beginSeek = (int) seekRand. Next (0, Int32.MaxValue-length * 10000 );
Var seeks = new int [length];
For (var I = 0; I <length; I ++)
{
BeginSeek ++ = 10000;
Seeks [I] = beginSeek;
}
// Generate random numbers
For (var I = 0; I <length; I ++)
{
Var rand = new Random (seeks [I]);
Var pownum = 1 * (int) Math. Pow (10, length );
RandMembers [I] = rand. Next (pownum, Int32.MaxValue );
}
// Extract random numbers
For (var I = 0; I <length; I ++)
{
Var numStr = randMembers [I]. ToString ();
Var numLength = numStr. Length;
Var rand = new Random ();
Var numPosition = rand. Next (0, numLength-1 );
ValidateNums [I] = Int32.Parse (numStr. Substring (numPosition, 1 ));
}
// Generate the verification code
For (var I = 0; I <length; I ++)
{
ValidateNumberStr + = validateNums [I]. ToString ();
}
Return validateNumberStr;
}
/// <Summary>
/// Image of the Verification Code
/// </Summary>
/// <Param name = "validateCode"> Verification Code </param>
Public byte [] CreateValidateGraphic (string validateCode)
{
Var image = new Bitmap (int) Math. Ceiling (validateCode. Length * 12.0), 22 );
Var g = Graphics. FromImage (image );
Try
{
// Generate a random Generator
Var random = new Random ();
// Clear the background color of the image
G. Clear (Color. White );
// Picture interference line
For (int I = 0; I <25; I ++)
{
Var x1 = random. Next (image. Width );
Var x2 = random. Next (image. Width );
Var y1 = random. Next (image. Height );
Var y2 = random. Next (image. Height );
G. DrawLine (new Pen (Color. Silver), x1, y1, x2, y2 );
}
// Font font = new Font ("Arial", 12, (FontStyle. Bold | FontStyle. Italic ));
String [] fontName = {" 文 ", ""};
Var font = new Font (fontName [new Random (). Next (0, validateCode. Length)], 12, (FontStyle. Bold | FontStyle. Italic ));
Var brush = new LinearGradientBrush (new Rectangle (0, 0, image. Width, image. Height ),
Color. Blue, Color. DarkRed, 1.2f, true );
G. DrawString (validateCode, font, brush, 3, 2 );
// Foreground interference points
For (var I = 0; I <100; I ++)
{
Var x = random. Next (image. Width );
Var y = random. Next (image. Height );
Image. SetPixel (x, y, Color. FromArgb (random. Next ()));
}
// Draw the border line of the image
G. DrawRectangle (new Pen (Color. Silver), 0, 0, image. Width-1, image. Height-1 );
// Save image data
Var stream = new MemoryStream ();
Image. Save (stream, ImageFormat. Jpeg );
// Output the image stream
Return stream. ToArray ();
}
Finally
{
G. Dispose ();
Image. Dispose ();
}
}
/// <Summary>
/// Obtain the length of the Verification Code Image
/// </Summary>
/// <Param name = "validateNumLength"> Verification code length </param>
/// <Returns> </returns>
Public static int GetImageWidth (int validateNumLength)
{
Return (int) (validateNumLength * 12.0 );
}
/// <Summary>
/// Obtain the height of the Verification Code
/// </Summary>
/// <Returns> </returns>
Public static double GetImageHeight ()
{
Return 23;
}
}
}
3. Create a BaseController
Copy codeThe Code is as follows:
Using System;
Using System. Collections. Generic;
Using System. Linq;
Using System. Web;
Using System. Web. Mvc;
Namespace MvcApplication1
{
Public class BaseController: Controller
{
Public ActionResult GetValidateCode (int length)
{
Var vCode = new ValidateCode ();
Var code = vCode. CreateValidateCode (length );
Session ["ValidateCode"] = code;
Var bytes = vCode. CreateValidateGraphic (code );
Return File (bytes, @ "image/gif ");
}
Protected string GetValidateCode ()
{
Return Session ["ValidateCode"]. ToString ();
}
}
}
4. Let the Controller inherit the BaseController:
Copy codeThe Code is as follows:
Using System;
Using System. Collections. Generic;
Using System. Linq;
Using System. Web;
Using System. Web. Mvc;
Using System. Web. Security;
Namespace MvcApplication1.Controllers
{
Public class HomeController: BaseController
{
Public ActionResult Index ()
{
ViewBag. Message = "Welcome to ASP. net mvc! ";
Return View ();
}
Public ActionResult About ()
{
Var code = GetValidateCode ();
Return View ();
}
}
}
5. Page call code:
Copy codeThe Code is as follows:
@ Using MvcApplication1
@{
ViewBag. Title = "About Us ";
}
<H2> About <P>
Put content here.
</P>
@ Html. ValidateCode ()
6. Verification Code:
Source code can be downloaded from here: ValidateCode.rar