【轉載】Asp.Net生成圖片驗證碼工具類

来源:https://www.cnblogs.com/xu-yi/archive/2019/07/14/11186526.html
-Advertisement-
Play Games

在Asp.Net應用程式中,很多時候登陸頁面以及其他安全重要操作的頁面需要輸入驗證碼,本文提供一個生成驗證碼圖片的工具類,該工具類通過隨機數生成驗證碼文本後,再通過C#中的圖片處理類點陣圖類,字體類,一個LinearGradientBrush類等生成驗證碼圖片。 本文生成圖片驗證碼的採用Asp.Net ...


在Asp.Net應用程式中,很多時候登陸頁面以及其他安全重要操作的頁面需要輸入驗證碼,本文提供一個生成驗證碼圖片的工具類,該工具類通過隨機數生成驗證碼文本後,再通過C#中的圖片處理類點陣圖類,字體類,一個LinearGradientBrush類等生成驗證碼圖片。

本文生成圖片驗證碼的採用Asp.Net中的一般處理程式文件ashx的文件,此文件一般繼承於IHttpHandler的介面,是Asp.Net中一種比較常用的處理文件,比起.ASPX等頁文件來,用ashx的文件生成圖片驗證碼更為高效。

Asp.Net生成圖片驗證碼工具類具體實現如下:

public class Handler:IHttpHandler,System.Web.SessionState.IRequiresSessionState 
{ 
             /// <summary> 
        ///產生用於驗證碼的隨機數
        /// </ summary> 
        /// <param name =“number”> < / param> 
        /// <returns> </ returns> 
        public string Get_Code(int number)
        { 
            # 
            region string s =“0AaB1oCb3pqD2cErf4dFs5GetHI6gu7JKLvhMwNixO8PyQj9zRSkTUVlWmXYnZ”; 
            隨機rand = new Random(); 
            StringBuilder builder = new StringBuilder(); 
            forint i = 0; i <number; i ++)
            { 
                char code = s [rand.Next(s.Length)];
                builder.Append(code.ToString()); 
            } 
            return builder.ToString(); 
            #endregion 
        } 
   
    public void ProcessRequest(HttpContext context)
    { 
       
        BLL_User userbll = new BLL_User(); 
        string code = Get_Code(4); //生成驗證碼的四位隨機碼
        context.Session [“Code”] = code; 
        點陣圖圖像=新點陣圖(120,40); 
        圖形g = Graphics.FromImage(圖像); 
        試試
        { 
            g.Clear(Color.White); 
            隨機rand = new Random(); 
            forint i = 0; i <30; i ++)
            {
                int x1 = rand.Next(Image.Width); 
                int x2 = rand.Next(Image.Width); 
                int y1 = rand.Next(Image.Height); 
                int y2 = rand.Next(Image.Height); 
                g.DrawLine(new Pen(Color.Silver),x1,y1,x2,y2); 
            } 
            Font font = new Font(“Arial”,20,FontStyle.Italic); 
            LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0,0,Image.Width,Image.Height),Color.Blue,Color.DarkRed,5true); 
            g.DrawString(代碼,字體,畫筆,3,2); 
            g.DrawRectangle(new Pen(Color.Silver),0,0,Image.Width - 1,Image.Height - 1); 
            System.IO.MemoryStream stream = new System.IO.MemoryStream();
            Image.Save(stream,ImageFormat.Gif); 
            context.Response.Clear(); 
            context.Response.ContentType =“image / Gif”; 
            context.Response.BinaryWrite(stream.ToArray()); 
        } 
        finally 
        {    
            g.Dispose(); 
            Image.Dispose(); 
        } 
      
    } 
    
    
    public BOOL IsReusable { 
       get { 
           return false; 
        } 
    }

}

在上述代碼中,.ashx的文件類繼承了System.Web.SessionState.IRequiresSessionState介面,主要是為了能夠在.ashx的文件中能訪問到會話變數,並將生成好的驗證碼信息存入會話中。

在網路前端界面要生成二維碼圖片的時候,直接將IMG標簽的圖片路徑的src屬性指向這個ashx的文件,例如這個.ashx的文件在網路項目中存放在根目錄並且命名為ValidateCode.ashx,則在HTML文件中直接如下形式即可生成驗證碼圖片:

<img src =“ValidateCode.ashx”此處編寫其他屬性/>

 

備註:原文轉載自博主個人站IT技術小趣屋,原文鏈接為Asp.Net生成圖片驗證碼工具類_IT技術小趣屋


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 之前我們探討過一個.class文件是如何被載入到jvm中的。但是jvm內又是如何劃分記憶體的呢?這個內被載入到了那一塊記憶體中?jvm記憶體劃分也是面試當中必被問到的一個面試題。 什麼是jvm記憶體區域劃分? 其實這個問題非常簡單,JVM在運行我們寫好的代碼時,他是必須使用多塊記憶體空間的,不同的記憶體空 ...
  • //表單@if($v['sex']==0) <td class="se" ss="{{$v['sex']}}" id="{{$v['id']}}" >男</td> @elseif($v['sex']==1) <td class="se" ss="{{$v['sex']}}" id="{{$v['id ...
  • 一、依賴註入的概念瞭解 介紹依賴註入(DI),首先要先瞭解一個概念——即控制反轉(IoC)。 控制反轉是面向對象編程的一種設計原則,可以用來減低電腦代碼之間的耦合度。在傳統的應用程式中,都是程式員手動在類的內部創建需要依賴的對象,而這種方式經常會導致類與類之間的高度耦合,難以測試。而當有了IoC容 ...
  • java高併發系列 第1天:必須知道的幾個概念 同步(Synchronous)和非同步(Asynchronous) 同步和非同步通常來形容一次方法調用, 同步方法調用一旦開始,調用者必須等到方法調用返回後,才能繼續後續的行為 。 非同步方法調用更像一個消息傳遞,一旦開始,方法調用就會立即返回,調用者就可以 ...
  • 最近一直在重構系統,看到我們原來的代碼里,對於數據許可權的實現居然是在查詢語句里寫死的。 正感慨這祖傳代碼怎麼這麼坑,領導就讓我重新設計許可權模塊。這.... 好吧,反正都在重構代碼,直接推翻重來也不算填坑。 先開始梳理需求,所謂“數據許可權”,即經過普通的菜單、按鈕許可權後,對用戶能獲取到的數據再進行一次 ...
  • 在C#操作集合數據的過程中,有時候需要手動創建一個DataTable對象,並手動設置DataTable對象的Columns列名等信息,最後再往手動創建的DataTable對象中寫入相應的數據信息,此時就使用到DataTable類的Columns.Add方法、NewRow方法以及Rows.Add等方法 ...
  • 在C#的資料庫操作過程中,SqlCommand類一般用於Sqlserver資料庫的SQL語句的執行,包括Select語句、Update語句、Delete語句以及SQL存儲過程等,SqlCommand的操作一般在SqlConnection類成功連接Sqlserver資料庫後,並使用SqlConnect ...
  • 在C#的資料庫編程中,SqlConnection類主要用於連接Sqlserver資料庫,使用SqlConnection類的實例方法我們可以打開Sqlserver資料庫連接以及獲取數據完畢後關閉資料庫連接等操作,此文將介紹SqlConnection類的一些常用屬性以及方法。 一、SqlConnecti ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...