1. 程式人生 > >【無私分享:ASP.NET CORE 專案實戰(第十四章)】圖形驗證碼的實現

【無私分享:ASP.NET CORE 專案實戰(第十四章)】圖形驗證碼的實現

 1  public class VierificationCodeServices
 2     {
 3         /// <summary>  
 4         /// 該方法用於生成指定位數的隨機數  
 5         /// </summary>  
 6         /// <param name="VcodeNum">引數是隨機數的位數</param>  
 7         /// <returns>返回一個隨機數字符串</returns>  
 8         private string RndNum(int VcodeNum)
9 { 10 //驗證碼可以顯示的字元集合 11 string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p" + 12 ",q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,P,Q" + 13 ",R,S,T,U,V,W,X,Y,Z"; 14 string[] VcArray = Vchar.Split(new Char[] { '
,' });//拆分成陣列 15 string code = "";//產生的隨機數 16 int temp = -1;//記錄上次隨機數值,儘量避避免生產幾個一樣的隨機數 17 18 Random rand = new Random(); 19 //採用一個簡單的演算法以保證生成隨機數的不同 20 for (int i = 1; i < VcodeNum + 1; i++) 21 { 22 if (temp != -1
) 23 { 24 rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));//初始化隨機類 25 } 26 int t = rand.Next(61);//獲取隨機數 27 if (temp != -1 && temp == t) 28 { 29 return RndNum(VcodeNum);//如果獲取的隨機數重複,則遞迴呼叫 30 } 31 temp = t;//把本次產生的隨機數記錄起來 32 code += VcArray[t];//隨機數的位數加一 33 } 34 return code; 35 } 36 37 /// <summary> 38 /// 該方法是將生成的隨機數寫入影象檔案 39 /// </summary> 40 /// <param name="code">code是一個隨機數</param> 41 /// <param name="numbers">生成位數(預設4位)</param> 42 public MemoryStream Create(out string code, int numbers = 4) 43 { 44 code = RndNum(numbers); 45 Bitmap Img = null; 46 Graphics g = null; 47 MemoryStream ms = null; 48 Random random = new Random(); 49 //驗證碼顏色集合 50 Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; 51 52 //驗證碼字型集合 53 string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋體" }; 54 55 56 //定義影象的大小,生成影象的例項 57 Img = new Bitmap((int)code.Length * 18, 32); 58 59 g = Graphics.FromImage(Img);//從Img物件生成新的Graphics物件 60 61 g.Clear(Color.White);//背景設為白色 62 63 //在隨機位置畫背景點 64 for (int i = 0; i < 100; i++) 65 { 66 int x = random.Next(Img.Width); 67 int y = random.Next(Img.Height); 68 g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1); 69 } 70 //驗證碼繪製在g中 71 for (int i = 0; i < code.Length; i++) 72 { 73 int cindex = random.Next(7);//隨機顏色索引值 74 int findex = random.Next(5);//隨機字型索引值 75 Font f = new Font(fonts[findex], 15, FontStyle.Bold);//字型 76 Brush b = new SolidBrush(c[cindex]);//顏色 77 int ii = 4; 78 if ((i + 1) % 2 == 0)//控制驗證碼不在同一高度 79 { 80 ii = 2; 81 } 82 g.DrawString(code.Substring(i, 1), f, b, 3 + (i * 12), ii);//繪製一個驗證字元 83 } 84 ms = new MemoryStream();//生成記憶體流物件 85 Img.Save(ms, ImageFormat.Jpeg);//將此影象以Png影象檔案的格式儲存到流中 86 87 //回收資源 88 g.Dispose(); 89 Img.Dispose(); 90 return ms; 91 } 92 }

相關推薦

無私分享ASP.NET CORE 專案實戰圖形驗證實現

1 public class VierificationCodeServices 2 { 3 /// <summary> 4 /// 該方法用於生成指定位數的隨機數 5 /// </summary> 6

無私分享ASP.NET CORE 專案實戰Asp.net Core 快取 MemoryCache 和 Redis

1 /// <summary> 2 /// 修改快取 3 /// </summary> 4 /// <param name="key">快取Key</param> 5 ///

無私分享ASP.NET CORE 專案實戰新增對SqlServer、MySql、Oracle的支援

目錄索引 簡介   增加對多資料庫的支援,並不是意味著同時對多種資料庫操作,當然,後面,我們會嘗試同時對多種資料庫操作,這可能需要多個上下文,暫且不論。分散式資料庫,我們採用的是阿里雲的Mycat,這個後面會更新出來。我們今天的場景是:我們的專案可能是在windows上開發的使用的

無私分享ASP.NET CORE 專案實戰釋出專案到 Linux 上執行 Core 專案

目錄索引 簡介   ASP.Net Core 給我們帶來的最大的亮點就是跨平臺,我在我電腦(win7)上用虛擬機器建了個 CentOS7 ,來演示下,我們windows上的專案如何釋出專案到Linux上執行。我這裡有個在windows上搭建過的程式,我們主要演示如何在linux上執

無私分享ASP.NET CORE 專案實戰建立區域Areas,新增TagHelper

目錄索引 簡介   在Asp.net Core VS2015中,我們發現還有很多不太簡便的地方,比如右擊新增檢視,轉到試圖頁等功能圖不見了,雖然我們可以通過工具欄的自定義命令,把這兩個右擊選單新增上,但是貌似是灰色的不能用。   其實,這樣也好,通過手動建立,更讓我們深刻的理解M

無私分享ASP.NET CORE 專案實戰讀取配置檔案 appsettings.json

目錄索引 簡介   在我們之前的Asp.net mvc 開發中,一提到配置檔案,我們不由的想到 web.config 和 app.config,在 core 中,我們看到了很多的變化,新的配置系統顯得更加輕量級,具有更好的擴充套件性,並且支援多樣化的資料來源。   部落格園對於這個的

無私分享ASP.NET CORE 專案實戰讀取配置檔案 讀取自定義配置檔案

目錄索引 簡介   但隨之產生了問題:我們使用的是在 Startup.cs 中(如下圖)來實現配置讀取,有兩個問題 ① 我們如果定義N種配置,是否要再這裡新增N條這樣的配置 ; ② 如果我們的配置不想寫在appsettings.json中呢     解決問題

無私分享ASP.NET CORE 專案實戰十三Asp.net Core 使用MyCat分散式資料庫,實現讀寫分離

目錄索引 簡介   MyCat2.0版本很快就釋出了,關於MyCat的動態和一些問題,大家可以加一下MyCat的官方QQ群:106088787。我們今天主要介紹一下,在我們的Asp.net Core中如何使用Mycat,這源於一個大神(Amamiya Yuuko)的分享,但是,這中

無私分享ASP.NET CORE 專案實戰Code First 建立資料庫和資料表

目錄索引 簡介   本章我們來介紹下Asp.net Core 使用 CodeFirst 建立資料庫和表,通過 控制檯 和 dotnet ef 兩種方式 修改EF上下文物件,新增測試類   我修改了一下名字,Domains 改為了 wkmvc.Data   我們新建一個

無私分享ASP.NET CORE 專案實戰檔案操作 FileHelper

目錄索引 簡介   在程式設計中,我們很多情況下,會用到對檔案的操作,在 上一個系列 中,我們有很多檔案基本操作的示例,在Core中有一些改變,主要是我們常用的Server.MapPath()不存在了,不知道後續的版本會不會有,在這裡,我們只能自己封裝方法去實現。今天,我們就對一些基本

無私分享ASP.NET CORE 專案實戰Repository倉儲 UnitofWork

1 public abstract class Repository<T> : IRepository<T> where T : class 2 { 3 #region 資料上下文 4 5 /// <s

無私分享ASP.NET CORE 專案實戰EntityFramework下領域驅動設計的應用

這好像就是比我的多了一個“中轉層”,把我們的介面作為了一箇中轉,領域層繼承了倉儲實現業務和資料操作,這有什麼實際意義嗎?希望大家指正一下: 我不理解的是,如果是按照這樣,那麼我如果要修改註冊方法,比如我要在上面方法中傳遞 eamil,name,password 的基礎上還需要傳遞手機號碼,那麼我需要修改

無私分享ASP.NET CORE 專案實戰第二新增EF上下文物件,新增介面、實現類以及無處不在的依賴注入DI

目錄索引 簡介   上一章,我們介紹了安裝和新建控制器、檢視,這一章我們來建立個數據模型,並且新增介面和實現類。 新增EF上下文物件   按照我們以前的習慣,我們還是新建幾個資料夾   Commons:存放幫助類   Domians:資料模型   Services

ASP.NET Core 專案實戰持續更新~~~

 一、前言   準備寫這個系列文章的設想開始於今年9月,毫無意外,期間又又又又拖了很長時間,文章主要是為了記錄自己學習使用 ASP.NET Core Web API 與 Vue 建立一個前後端分離的專案的整個過程。嗯,2018年快要結束了,應該能在 .NET Core 3.0 正式版和 Vue 3

乾貨分享ASP.NET COREC#與Spring Boot MVC(JAVA)異曲同工的程式設計方式總結

目錄 C# VS JAVA 基礎語法類比篇: 一、匿名類 二、型別初始化 三、委託(方法引用) 四、Lambda表示式 五、泛型 六、自動釋放

Asp.net core 專案實戰 新聞網站+後臺 原始碼、設計原理 、視訊教程

首先說明,視訊教程、原始碼並非本人原創 本人將專案分割開,並寫了一些說明。 該視訊教程 地址  https://study.163.com/course/courseMain.htm?courseId=1005955006 原作者 筆者正在學 ASP.NET Core ,發現這

.NET Core實戰專案之CMS 開發篇-防止跨站請求偽造XSRF/CSRF攻擊處理

通過 ASP.NET Core,開發者可輕鬆配置和管理其應用的安全性。 ASP.NET Core 中包含管理身份驗證、授權、資料保護、SSL 強制、應用機密、請求防偽保護及 CORS 管理等等安全方面的處理。 通過這些安全功能,可以生成安全可靠的 ASP.NET Core 應用。而我們這一章就來說道說道如何在

ASP.NET Core 2.2 基礎知識() WebAPI Action返回型別(未完待續)

要啥自行車,直接看手錶 //返回基元型別 public string Get() { return "hello world"; }   //返回複雜型別 p

ASP.NET Core 2.2 基礎知識() WebAPI Action返回類型(未完待續)

app tro bapi otf action urn 控制器 pre 格式 要啥自行車,直接看手表 //返回基元類型 public string Get() { return "hello worl

無私分享從入門到精通ASP.NET MVC從0開始,一起搭框架、做專案7.2 模組管理,模組的新增、修改、刪除

索引 簡述 今天我們來做模組管理的 新增、修改、刪除 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了