Best?tigungscode-Klasse
namespace QJW.VerifyCode { //用法: //public FileContentResult CreateValidate() //{ // ValidateCode vCode = new ValidateCode(); // string code = vCode.CreateValidateCode(5); // Session["ValidateCode"] = code; // byte[] bytes = vCode.CreateValidateGraphic(code); // return File(bytes, "image/JPEG"); //} public class ValidateCode { public ValidateCode() { } /// <summary> /// 驗(yàn)證碼的最大長度 /// </summary> public int MaxLength { get { return 10; } } /// <summary> /// 驗(yàn)證碼的最小長度 /// </summary> public int MinLength { get { return 1; } } /// <summary> /// 生成驗(yàn)證碼 /// </summary> /// <param name="length">指定驗(yàn)證碼的長度</param> /// <returns></returns> public 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(0, Int32.MaxValue - length * 10000); int[] seeks = new int[length]; for (int i = 0; i < length; i++) { beginSeek += 10000; seeks[i] = beginSeek; } //生成隨機(jī)數(shù)字 for (int i = 0; i < length; i++) { Random rand = new Random(seeks[i]); int pownum = 1 * (int)Math.Pow(10, length); randMembers[i] = rand.Next(pownum, Int32.MaxValue); } //抽取隨機(jī)數(shù)字 for (int i = 0; i < length; i++) { string numStr = randMembers[i].ToString(); int numLength = numStr.Length; Random rand = new Random(); int numPosition = rand.Next(0, numLength - 1); validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1)); } //生成驗(yàn)證碼 for (int i = 0; i < length; i++) { validateNumberStr += validateNums[i].ToString(); } return validateNumberStr; } /// <summary> /// 創(chuàng)建驗(yàn)證碼的圖片 /// </summary> /// <param name="containsPage">要輸出到的page對象</param> /// <param name="validateNum">驗(yàn)證碼</param> public byte[] CreateValidateGraphic(string validateCode) { Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22); Graphics g = Graphics.FromImage(image); try { //生成隨機(jī)生成器 Random random = new Random(); //清空圖片背景色 g.Clear(Color.White); //畫圖片的干擾線 for (int i = 0; i < 25; 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", 12, (FontStyle.Bold | FontStyle.Italic)); LinearGradientBrush 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); //畫圖片的前景干擾點(diǎn) for (int i = 0; i < 100; 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), 0, 0, image.Width - 1, image.Height - 1); //保存圖片數(shù)據(jù) MemoryStream stream = new MemoryStream(); image.Save(stream, ImageFormat.Jpeg); //輸出圖片流 return stream.ToArray(); } finally { g.Dispose(); image.Dispose(); } } /// <summary> /// 得到驗(yàn)證碼圖片的長度 /// </summary> /// <param name="validateNumLength">驗(yàn)證碼的長度</param> /// <returns></returns> public static int GetImageWidth(int validateNumLength) { return (int)(validateNumLength * 12.0); } /// <summary> /// 得到驗(yàn)證碼的高度 /// </summary> /// <returns></returns> public static double GetImageHeight() { return 22.5; } } }
Verwendung
public FileContentResult CreateValidate() { ValidateCode vCode = new ValidateCode(); string code = vCode.CreateValidateCode(5); Session["ValidateCode"] = code; byte[] bytes = vCode.CreateValidateGraphic(code); return File(bytes, "image/JPEG"); }
HTML
;img id="safecode" src="/common/CreateValidate" alt="" />
JS anzeigen
function reloadcode() { var verify = document.getElementById('safecode'); verify.setAttribute('src', '/common/CreateValidate?' + Math.random()); }
Das Obige ist der gesamte Inhalt dieses Artikels Ich hoffe, dass es allen beim Lernen hilft und ich hoffe, dass jeder die chinesische PHP-Website unterstützt.
Weitere Artikel zur Verwendung der MVC-Verifizierungscodeklasse von asp.net finden Sie auf der chinesischen PHP-Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

Sie haben KeeKeywordinc#vereinfacht, dass byAutomatischgeneratestatemachinethatenableSlazyEvaluation.1.itallowsReturningEMSonatimeuchteyieldReturn, PaeteExecutionBetweeneachItem, die ISIDEALFORGARGARGEordynamic -Sequences.2.yieldbreakcanBeusus

Abh?ngigkeitsinjektion (DI) Inc#isAdesignPatternThatenhancesModularit?t, Testbarkeit und Maschinenbarkeit von ClasseSestoreceivedEpendenciesexternally.1.DiPromotesLoosecoUPlingByDecoUplingObjectCreationFromusage.2itsimplifiedeDing ThroughthroughthroughthroughthroughthmockoBectinjectinjectinjectinjekte

Die Rolle von idisposbar und in C# besteht darin, nicht verwaltete Ressourcen effizient und deterministisch zu verwalten. 1. idisposable bietet die Dispose () -Methode, damit die Klasse klar definieren kann, wie nicht verwaltete Ressourcen freigegeben werden k?nnen. 2. Die Verwendung der Verwendung stellt sicher, dass Dispose () automatisch aufgerufen wird, wenn das Objekt aus dem Zielfernrohr ist, das Ressourcenmanagement vereinfacht und Leckagen vermieden wird. 3. Wenn Sie es verwenden, beachten Sie bitte, dass das Objekt iDisposable implementieren muss, mehrere Objekte deklarieren kann und immer die Verwendung für Typen wie StreamReader verwenden sollte. 4. Zu den h?ufigen Best Practices geh?rt es, sich nicht auf Destruktoren zu verlassen, um die Verschachtelungen korrekt zu behandeln und das Disol -Muster (Dispose) zu implementieren.

LambdaexpressionsandlinqSimplifyDatamanipulationInC#ByenablingConcise, lesbar und efficienzidcode.1.lambdaexpressionslowinLineFunctionDefinitions, MakeTeSasierTopassLogicasargumentsfor -filtering, sortieren, aggategategategategorientiert

Nullablereferencetypes(NRTs)inC#8 helpcatchNullReferenceExceptionerrorsatcompiletimebymakingreferencetypesnon-nullablebydefault,requiringexplicitdeclarationfornullability.NRTsmustbeenabledeitherinthe.csprojfilewithenableoratthetopofa.csfileusing#null

Vier übliche "Anti-Muster" -Probleme in der C# -entwicklung müssen vermieden werden. Erstens führt der unangemessene Gebrauch von Async/Auseait zu Deadlocks oder Leistungsverschlechterungen. Wir sollten uns an das Prinzip der vollst?ndigen Asynchronit?t halten, configureAwait (falsch) konfigurieren und die Benennung standardisieren. Zweitens beeinflusst eine überm??ige Abh?ngigkeit von VAR die Lesbarkeit und deklare und vereint die Teamspezifikationen explizit, wenn der Typ unklar ist. Drittens führt die falsche Verwendung von Entsus- und Ressourcenverwaltung zu Leckagen, und die Anwendungsanweisung sollte korrekt verwendet werden und der iDisposable Standardmodus sollte implementiert werden. Viertens verursacht der Missbrauch statischer Klassen oder Singletons Testschwierigkeiten, und die Abh?ngigkeitsinjektion, die Staatenlosigkeit oder den Lebenszyklus, der von Containern verwaltet wird, sollte Priorit?t einger?umt werden. Das Vermeiden dieser Missverst?ndnisse kann die Qualit?t und Wartung der Code erheblich verbessern.

Span und Speicher verbessern die C# -Leistung durch Reduzierung der Speicherzuweisung. 1.span vermeidet das Array-Kopieren und liefert leichte Verweise auf den vorhandenen Speicher, der für die Parsen von Bin?rprotokollen, Stringoperationen und Hochleistungs-Puffermanagement geeignet ist. 2. Speicher unterstützt das übergeben von Speicherschnitten über asynchrone Methoden, was für Szenarien geeignet ist, in denen flexiblere Lebenszyklen erforderlich sind. 3. Beide reduzieren den GC -Druck, optimieren Sie die Leistung, indem Sie Puffer wiederverwenden und ein vorübergehendes Kopieren vermeiden. 4. Die Span ist auf den Stapel beschr?nkt und kann nicht in Klassen gespeichert oder in asynchronen Methoden verwendet werden. Vermeiden Sie vorsichtig, um Neuzuweisungsoperationen wie Calling.toArray () zu vermeiden.

Solides Prinzip sind fünf Entwurfsprinzipien, um die Wartbarkeit der Code und die Skalierbarkeit bei objektorientierter Programmierung zu verbessern. Sie sind: 1. Das Prinzip der einzelnen Verantwortung (SRP) verlangt, dass die Klasse nur eine Verantwortung übernimmt, z. 2. Das ?ffnungs- und Schlussprinzip (OCP) betont, dass die Erweiterung durch Schnittstellen oder abstrakte Klassen unterstützt wird, ohne den ursprünglichen Code zu ?ndern, z. 3. Das Richter -Ersatzprinzip (LSP) erfordert, dass die Unterklasse die übergeordnete Klasse ersetzen kann, ohne die Logik zu zerst?ren, z. 4. Das Interface-Isolationsprinzip (ISP) befürwortet die Definition feink?rniger Schnittstellen, wie z. 5. Das Abh?ngigkeitsinversionsprinzip (DIP) befürwortet die
