日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core 中生成验证码

發布時間:2023/12/4 asp.net 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core 中生成验证码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在開發中,有時候生成驗證碼的場景目前還是存在的,本篇演示不依賴第三方組件,生成隨機驗證碼圖片。

先添加驗證碼接口

public?interface?ICaptcha {///?<summary>///?生成隨機驗證碼///?</summary>///?<param?name="codeLength"></param>///?<returns></returns>Task<string>?GenerateRandomCaptchaAsync(int?codeLength?=?4);///?<summary>///?生成驗證碼圖片///?</summary>///?<param?name="captchaCode">驗證碼</param>///?<param?name="width">寬為0將根據驗證碼長度自動匹配合適寬度</param>///?<param?name="height">高</param>///?<returns></returns>Task<CaptchaResult>?GenerateCaptchaImageAsync(string?captchaCode,?int?width?=?0,?int?height?=?30); }

驗證碼返回模型

public?class?CaptchaResult {///?<summary>///?CaptchaCode///?</summary>public?string?CaptchaCode?{?get;?set;?}///?<summary>///?CaptchaMemoryStream///?</summary>public?MemoryStream?CaptchaMemoryStream?{?get;?set;?}///?<summary>///?Timestamp///?</summary>public?DateTime?Timestamp?{?get;?set;?} }

接下來實現接口,主要是依賴微軟的System.Drawing.Common組件,注意命名空間的引用

using?System; using?System.Drawing; using?System.Drawing.Imaging; using?System.IO; using?System.Threading.Tasks;...public?class?Captcha?:?ICaptcha {private?const?string?Letters?=?"1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z";public?Task<CaptchaResult>?GenerateCaptchaImageAsync(string?captchaCode,?int?width?=?0,?int?height?=?30){//驗證碼顏色集合Color[]?c?=?{?Color.Black,?Color.Red,?Color.DarkBlue,?Color.Green,?Color.Orange,?Color.Brown,?Color.DarkCyan,?Color.Purple?};//驗證碼字體集合string[]?fonts?=?{?"Verdana",?"Microsoft?Sans?Serif",?"Comic?Sans?MS",?"Arial"?};//定義圖像的大小,生成圖像的實例var?image?=?new?Bitmap(width?==?0???captchaCode.Length?*?25?:?width,?height);var?g?=?Graphics.FromImage(image);//背景設為白色g.Clear(Color.White);var?random?=?new?Random();for?(var?i?=?0;?i?<?100;?i++){var?x?=?random.Next(image.Width);var?y?=?random.Next(image.Height);g.DrawRectangle(new?Pen(Color.LightGray,?0),?x,?y,?1,?1);}//驗證碼繪制在g中for?(var?i?=?0;?i?<?captchaCode.Length;?i++){//隨機顏色索引值var?cindex?=?random.Next(c.Length);//隨機字體索引值var?findex?=?random.Next(fonts.Length);//字體var?f?=?new?Font(fonts[findex],?15,?FontStyle.Bold);//顏色??Brush?b?=?new?SolidBrush(c[cindex]);var?ii?=?4;if?((i?+?1)?%?2?==?0)ii?=?2;//繪制一個驗證字符??g.DrawString(captchaCode.Substring(i,?1),?f,?b,?17?+?(i?*?17),?ii);}var?ms?=?new?MemoryStream();image.Save(ms,?ImageFormat.Png);g.Dispose();image.Dispose();return?Task.FromResult(new?CaptchaResult{CaptchaCode?=?captchaCode,CaptchaMemoryStream?=?ms,Timestamp?=?DateTime.Now});}public?Task<string>?GenerateRandomCaptchaAsync(int?codeLength?=?4){var?array?=?Letters.Split(new[]?{?','?});var?random?=?new?Random();var?temp?=?-1;var?captcheCode?=?string.Empty;for?(int?i?=?0;?i?<?codeLength;?i++){if?(temp?!=?-1)random?=?new?Random(i?*?temp?*?unchecked((int)DateTime.Now.Ticks));var?index?=?random.Next(array.Length);if?(temp?!=?-1?&&?temp?==?index)return?GenerateRandomCaptchaAsync(codeLength);temp?=?index;captcheCode?+=?array[index];}return?Task.FromResult(captcheCode);} }

在控制器中注入調用

using?Microsoft.AspNetCore.Mvc; using?System.Threading.Tasks;[Route("api/[controller]")] [ApiController] public?class?CaptchaController?:?ControllerBase {[HttpGet]public?async?Task<FileContentResult>?CaptchaAsync([FromServices]?ICaptcha?_captcha){var?code?=?await?_captcha.GenerateRandomCaptchaAsync();var?result?=?await?_captcha.GenerateCaptchaImageAsync(code);return?File(result.CaptchaMemoryStream.ToArray(),?"image/png");} }

實際使用的時候,code就是本次生成的驗證碼,可以將其保存在session中,進行驗證,或者其它方式。


總結

以上是生活随笔為你收集整理的.NET Core 中生成验证码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。