首页 > 其他分享 >.Net Core验证码

.Net Core验证码

时间:2022-11-02 16:13:34浏览次数:82  
标签:Core string int image 验证码 Next Color new Net

1、复制下列代码,拷贝到控制器中。
 
#region  生成验证码图片
        // [OutputCache(Location = OutputCacheLocation.None, Duration = 0, NoStore = false)]
        public ActionResult SecurityCode()
        {

            string oldcode = Session["SecurityCode"] as string;
            string code = CreateRandomCode(5);
            Session["SecurityCode"] = code;
            return File(CreateValidateGraphic(code), "image/Jpeg");
        }


        private byte[] CreateImage(string checkCode)
        {
            int iwidth = (int)(checkCode.Length * 12);
            System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
            Graphics g = Graphics.FromImage(image);
            Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);
            Brush b = new System.Drawing.SolidBrush(Color.White);
            g.Clear(Color.Blue);
            g.DrawString(checkCode, f, b, 3, 3);
            Pen blackPen = new Pen(Color.Black, 0);
            Random rand = new Random();
            for (int i = 0; i < 5; 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, 1), x1, y1, x2, y2);
            }
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            return ms.ToArray();
        }

        private string CreateRandomCode(int codeCount)
        {
            string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";
            string[] allCharArray = allChar.Split(',');
            string randomCode = "";
            int temp = -1;
            Random rand = new Random();
            for (int i = 0; i < codeCount; i++)
            {
                if (temp != -1)
                {
                    rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
                }
                int t = rand.Next(35);
                if (temp == t)
                {
                    return CreateRandomCode(codeCount);
                }
                temp = t;
                randomCode += allCharArray[t];
            }
            return randomCode;
        }
        /// <summary>
        /// 创建验证码的图片
        /// </summary>
        public byte[] CreateValidateGraphic(string validateCode)
        {
            Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 16.0), 27);
            Graphics g = Graphics.FromImage(image);
            try
            {
                //生成随机生成器
                Random random = new Random();
                //清空图片背景色
                g.Clear(Color.White);
                //画图片的干扰线
                for (int i = 0; i < 25; i++)
                {
                    int x1 = random.Next(image.Width);
                    int x2 = random.Next(image.Width);
                    int y1 = random.Next(image.Height);
                    int y2 = random.Next(image.Height);
                    g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
                }
                Font font = new Font("Arial", 13, (FontStyle.Bold | FontStyle.Italic));
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
                 Color.Blue, Color.DarkRed, 1.2f, true);
                g.DrawString(validateCode, font, brush, 3, 2);
                //画图片的前景干扰点
                for (int i = 0; i < 100; i++)
                {
                    int x = random.Next(image.Width);
                    int y = random.Next(image.Height);
                    image.SetPixel(x, y, Color.FromArgb(random.Next()));
                }
                //画图片的边框线
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
                //保存图片数据
                MemoryStream stream = new MemoryStream();
                image.Save(stream, ImageFormat.Jpeg);
                //输出图片流
                return stream.ToArray();
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }
        }
        #endregion


2、复制以下图片标记到视图中
    <img src="/控制器的名字/SecurityCode" onclick="this.src+='?new Date()'" />

3、验证方式,使用 Session["SecurityCode"] 判断填写的是否相等。

转载于:ASP.netMVC验证码 - 雨殇丶 - 博客园 (cnblogs.com)

标签:Core,string,int,image,验证码,Next,Color,new,Net
From: https://www.cnblogs.com/xiangshifu/p/16851348.html

相关文章

  • C# .net ERP SAP 通过传表进行查询
    RfcDestinationdest=rfc_public.GetRfcDestination("SMP");IRfcFunctionfunc=dest.Repository.CreateFunction("ZPP_SYHD_GET_ISSUE_CHARGE");//接......
  • kubernetes的yml
    kubernetes的yml1:创建namespace文件po.yml内容如下apiVersion:v1kind:Namespacemetadata:name:po 命令:kubectlapply-fpo.yml 删除namespace......
  • Net6开原框架Furion
    十年河东,十年河西,莫欺少年穷我入驻博客园十年了,十年来,让我从一个青春小伙变成了秃头大佬,呵呵今天一同事推荐了一个框架,在此记录下:参考地址:https://furion.baiqian.ltd/d......
  • 深入浅出ASP .NET Core学习记录
    深入浅出ASP.NETCore学习记录《深入浅出》第二部分总结第二章的学习代码:代码概括主要是实操,下面是实操完的项目结构图几个文件夹,代表什么意思Controllers(重......
  • 关于 NGINX Kubernetes Gateway,你需要知道的 5 件事
    原文作者:IlyaKrutovofF5原文链接:​​​关于NGINXKubernetesGateway,你需要知道的5件事​​转载来源:NGINX官方网站在过去的几年里,F5NGINX帮助您成功走完了Kuberne......
  • .Net Core后台任务启停(BackgroundService)
    BackgroundService描述说明:BackgroundService类 说到定时任务,可能第一个会想到Quartz,但是想到需要更简洁,而且想要毫秒级的周期,这个Cron真是太不智慧了,虽说可以在单个......
  • ubuntu 22.04 编译NetBSD
    本文参考链接:https://www.its301.com/article/u013257164/107532121偶然看到NetBSD源码可以在其他平台(linux,FreeBSD)上编译,亲自在ubuntu22.04试验了一下,确实可以,加......
  • U-Net在2022年相关研究的论文推荐
    UNet可以算是FCN的一种变体,是最常用、最简单的一种分割模型,简单、高效、易懂、容易构建,且可以从小数据集中训练。2015年,UNet在论文U-Net:ConvolutionalNetworksfo......
  • 如何在.NET程序崩溃时自动创建Dump?
    今天在浏览张队转载文章的留言时,遇到一个读者问了这样的问题,如下图所示:首先能明确的一点是"程序崩溃退出了是不能用常规的方式dump的",因为整个进程树都已经退出。现场已......
  • 【HMS Core】运动健康服务历史数据获取、华为推送通道问题、集成分析服务后上架审核失
    【运动健康服务】【问题描述】开发者咨询新用户绑定后,如何获取绑定之前的运动记录,可以获取绑定之前多久的记录? 【解决方案】问题一:调用Rest接口,查询绑定之前的运动记......