【轉載】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
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...