国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) 后端開發(fā) C#.Net教程 asp.net mvc驗(yàn)證碼類使用

asp.net mvc驗(yàn)證碼類使用

Jan 13, 2017 pm 02:07 PM

驗(yàn)證碼類

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)證碼的最大長(zhǎng)度
    /// </summary>
    public int MaxLength
    {
      get { return 10; }
    }
    /// <summary>
    /// 驗(yàn)證碼的最小長(zhǎng)度
    /// </summary>
    public int MinLength
    {
      get { return 1; }
    }
    /// <summary>
    /// 生成驗(yàn)證碼
    /// </summary>
    /// <param name="length">指定驗(yàn)證碼的長(zhǎng)度</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對(duì)象</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();
        //清空?qǐng)D片背景色
        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)證碼圖片的長(zhǎng)度
    /// </summary>
    /// <param name="validateNumLength">驗(yàn)證碼的長(zhǎng)度</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;
    }
  }
}

使用方法

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

視圖JS

function reloadcode() {
    var verify = document.getElementById(&#39;safecode&#39;);
    verify.setAttribute(&#39;src&#39;, &#39;/common/CreateValidate?&#39; + Math.random());
  }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持PHP中文網(wǎng)。

更多asp.net mvc驗(yàn)證碼類使用相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

C#中產(chǎn)量關(guān)鍵字對(duì)創(chuàng)建迭代器的意義是什么? C#中產(chǎn)量關(guān)鍵字對(duì)創(chuàng)建迭代器的意義是什么? Jun 19, 2025 am 12:17 AM

healieldKeyWordinc#簡(jiǎn)化了creationeratoratorabyautomationalingaseratingastatemachinethatemachinathablesLazyEvaluation.1.ItallowSreturningReturningInturningItemSoneatAtiMeTimeYielderturn,pausingexecutionBeteachieneachIneachIneachIneachIneachIneachIneachIneachItem,whoisidealforlargeordeNemicSequences.2.yieldBreakcanbeus.2.yieldBreakcanbeus

什么是依賴性注入(DI),如何在C#中實(shí)現(xiàn)(例如,在ASP.NET Core中使用內(nèi)置DI)? 什么是依賴性注入(DI),如何在C#中實(shí)現(xiàn)(例如,在ASP.NET Core中使用內(nèi)置DI)? Jun 30, 2025 am 02:06 AM

DependencyInjection(DI)inC#isadesignpatternthatenhancesmodularity,testability,andmaintainabilitybyallowingclassestoreceivedependenciesexternally.1.DIpromotesloosecouplingbydecouplingobjectcreationfromusage.2.Itsimplifiestestingthroughmockobjectinject

IDisposable接口和C#中的使用語(yǔ)句的目的是什么? IDisposable接口和C#中的使用語(yǔ)句的目的是什么? Jun 27, 2025 am 02:18 AM

IDisposable和using在C#中的作用是高效且確定性地管理非托管資源。1.IDisposable提供Dispose()方法,使類能明確定義如何釋放非托管資源;2.using語(yǔ)句確保對(duì)象超出范圍時(shí)自動(dòng)調(diào)用Dispose(),簡(jiǎn)化資源管理并避免泄漏;3.使用時(shí)需注意對(duì)象必須實(shí)現(xiàn)IDisposable,可聲明多個(gè)對(duì)象,并應(yīng)始終對(duì)如StreamReader等類型使用using;4.常見最佳實(shí)踐包括不要依賴析構(gòu)函數(shù)清理、正確處理嵌套對(duì)象及實(shí)現(xiàn)Dispose(bool)模式。

Lambda表達(dá)式和LINQ(語(yǔ)言集成查詢)如何增強(qiáng)C#中的數(shù)據(jù)操作? Lambda表達(dá)式和LINQ(語(yǔ)言集成查詢)如何增強(qiáng)C#中的數(shù)據(jù)操作? Jun 20, 2025 am 12:16 AM

LambdaexpressionsandLINQsimplifydatamanipulationinC#byenablingconcise,readable,andefficientcode.1.Lambdaexpressionsallowinlinefunctiondefinitions,makingiteasiertopasslogicasargumentsforfiltering,transforming,sorting,andaggregatingdatadirectlywithinme

C#8中的可無(wú)效參考類型(NRT)是什么,它們?nèi)绾螏椭乐筃ullReferenceException? C#8中的可無(wú)效參考類型(NRT)是什么,它們?nèi)绾螏椭乐筃ullReferenceException? Jun 21, 2025 am 12:36 AM

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

使用C#開發(fā)時(shí),有哪些常見的陷阱或反圖案可以避免? 使用C#開發(fā)時(shí),有哪些常見的陷阱或反圖案可以避免? Jun 23, 2025 am 12:05 AM

C#開發(fā)中常見四大“反模式”問題需避免。一是不合理使用async/await導(dǎo)致死鎖或性能下降,應(yīng)堅(jiān)持全異步原則、配置ConfigureAwait(false)并規(guī)范命名;二是過度依賴var影響可讀性,應(yīng)在類型不明確時(shí)顯式聲明并統(tǒng)一團(tuán)隊(duì)規(guī)范;三是錯(cuò)誤使用Dispose和資源管理引發(fā)泄漏,應(yīng)正確使用using語(yǔ)句及實(shí)現(xiàn)IDisposable標(biāo)準(zhǔn)模式;四是濫用靜態(tài)類或單例造成測(cè)試?yán)щy,應(yīng)優(yōu)先依賴注入、保持無(wú)狀態(tài)或由容器管理生命周期。避開這些誤區(qū)可顯著提升代碼質(zhì)量與維護(hù)性。

如何在C#中使用跨度和內(nèi)存來優(yōu)化內(nèi)存使用情況并減少分配? 如何在C#中使用跨度和內(nèi)存來優(yōu)化內(nèi)存使用情況并減少分配? Jun 18, 2025 am 12:11 AM

Span和Memory通過減少內(nèi)存分配提升C#性能。1.Span避免數(shù)組復(fù)制,提供對(duì)現(xiàn)有內(nèi)存的輕量引用,適用于解析二進(jìn)制協(xié)議、字符串操作及高性能緩沖區(qū)管理;2.Memory支持跨異步方法傳遞內(nèi)存切片,適用于需要更靈活生命周期的場(chǎng)景;3.二者降低GC壓力,通過重用緩沖區(qū)、避免臨時(shí)拷貝優(yōu)化性能;4.Span受限于棧上使用,不可存儲(chǔ)于類或用于異步方法,需注意避免調(diào)用.ToArray()等導(dǎo)致重新分配的操作。

您能在面向?qū)ο蟮脑O(shè)計(jì)中解釋可靠的原理及其應(yīng)用嗎? 您能在面向?qū)ο蟮脑O(shè)計(jì)中解釋可靠的原理及其應(yīng)用嗎? Jun 25, 2025 am 12:47 AM

SOLID原則是面向?qū)ο缶幊讨刑嵘a可維護(hù)性和擴(kuò)展性的五項(xiàng)設(shè)計(jì)原則,它們分別是:1.單一職責(zé)原則(SRP)要求類只承擔(dān)一個(gè)職責(zé),如將報(bào)告生成與郵件發(fā)送分離;2.開閉原則(OCP)強(qiáng)調(diào)通過接口或抽象類支持?jǐn)U展而不修改原有代碼,如使用IShape接口實(shí)現(xiàn)不同圖形的面積計(jì)算;3.里氏替換原則(LSP)要求子類能替換父類而不破壞邏輯,如Square不應(yīng)錯(cuò)誤繼承Rectangle導(dǎo)致行為異常;4.接口隔離原則(ISP)主張定義細(xì)粒度接口,如拆分打印與掃描功能避免冗余依賴;5.依賴倒置原則(DIP)提倡依

See all articles