.NetCore登入功能生成验证码
生成验证码
每一个.NetCore Web项目必不可少的就是登入注册功能,通常登入界面都会有一张验证码图片,只有根据图片输入验证码才能登入成功。验证码的主要功能就是验证操作者是人而非机器人,目的就是防止机器人暴力破解。
1、随机验证码
生成验证码,首先验证码的内容肯定是随机的。每次生成的内容都不相同。
.NetCore随机生成验证码代码示例如下:
string Letters = "1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,I,H,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
var array = Letters.Split(",");
var random = new Random();
string code= "";
for(int i = 0; i < 4; i++)
{
code+= array[random.Next(array.Length)];
}
以上代码是生成字母与数字随机组合的4位验证码,使用的就是Random随机数。
2、验证码画图
获取到随机生成的验证码内容后,就需要根据验证码内容生成图片。而.NetCore数据画图有三种方式。
System.Drawing.Common、SkiaSharp以及ImageSharp
2.1、System.Drawing.Common
使用System.Drawing.Common数据画图代码如下
public byte[] GetCodeImage(string captchaCode)
{
//验证码颜色集合
Color[] c = {
Color.MediumAquamarine,Color.MediumBlue,Color.MediumOrchid,Color.MediumPurple,Color.MediumSeaGreen,Color.MediumSlateBlue,
Color.MediumSpringGreen,Color.Maroon,Color.MediumTurquoise,Color.MidnightBlue,Color.MintCream,Color.MistyRose,
Color.Moccasin,Color.NavajoWhite,Color.Navy,Color.OldLace,Color.MediumVioletRed,Color.Magenta,Color.Linen,Color.LimeGreen,
Color.LavenderBlush,Color.LawnGreen,Color.LemonChiffon,Color.LightBlue,Color.LightCoral,Color.LightGoldenrodYellow,
Color.LightGreen,Color.LightPink,Color.LightSalmon,Color.LightSeaGreen,Color.LightSkyBlue,Color.LightSteelBlue,Color.LightYellow,
Color.Lime,Color.Olive,Color.OliveDrab,Color.Orange,Color.OrangeRed,Color.Silver,Color.SkyBlue,Color.SlateBlue,
Color.Snow,Color.SpringGreen,Color.SteelBlue,Color.Tan,Color.Teal,Color.Thistle,Color.Tomato,Color.Transparent,
Color.Turquoise,Color.Violet,Color.Wheat,Color.White,Color.WhiteSmoke,Color.Sienna,Color.Lavender,Color.SeaShell,
Color.SandyBrown,Color.Orchid,Color.PaleGoldenrod,Color.PaleGreen,Color.PaleTurquoise,Color.PaleVioletRed,Color.PapayaWhip,
Color.PeachPuff,Color.Peru,Color.Pink,Color.Plum,Color.PowderBlue,Color.Purple,Color.Red,Color.RosyBrown,Color.RoyalBlue,Color.SaddleBrown,
Color.Salmon,Color.SeaGreen,Color.Yellow,Color.Khaki,Color.Cyan,Color.DarkMagenta,Color.DarkKhaki,Color.DarkGreen,Color.DarkGoldenrod,
Color.DarkCyan,Color.DarkBlue,Color.Ivory,Color.Crimson,Color.Cornsilk,Color.CornflowerBlue,Color.Coral,Color.Chocolate,
Color.DarkOliveGreen,Color.Chartreuse,Color.BurlyWood,Color.Brown,Color.BlueViolet,Color.Blue,Color.BlanchedAlmond,
Color.Black,Color.Bisque,Color.Beige,Color.Azure,Color.Aquamarine,Color.Aqua,Color.AntiqueWhite,Color.AliceBlue,Color.CadetBlue,
Color.DarkOrange,Color.YellowGreen,Color.DarkRed,Color.Indigo,Color.IndianRed,Color.DarkOrchid,Color.Honeydew,Color.GreenYellow,
Color.Green,Color.Goldenrod,Color.Gold,Color.GhostWhite,Color.Gainsboro,Color.Fuchsia,Color.ForestGreen,Color.HotPink,Color.Firebrick,
Color.FloralWhite,Color.DodgerBlue,Color.DeepSkyBlue,Color.DeepPink,Color.DarkViolet,Color.DarkTurquoise,Color.DarkSlateBlue,
Color.DarkSeaGreen,Color.DarkSalmon};
//验证码字体集合
string[] fonts = {
"Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial" };
//定义图像的大小,生成图像的实例
var image = new Bitmap(140, 50);
// 画图
var g = Graphics.FromImage(image);
// 背景色
g.Clear(Color.LightGray);
// 随机
var random = new Random();
// 干扰
for (var i = 0; i <

本文详细介绍了在ASP.NET Core项目中实现登录功能时生成验证码的完整流程,包括随机生成验证码、三种绘图方法(System.Drawing.Common, SkiaSharp, ImageSharp)、保存与返回验证码图像、登录验证以及部署时遇到的问题。在Linux Docker环境中,System.Drawing.Common因依赖问题无法工作,而SkiaSharp出现验证码内容缺失的问题。最终提出了通过构建包含libgdiplus的自定义Docker镜像来解决部署难题。
最低0.47元/天 解锁文章
439





