首页 > 其他分享 >.net网页验证码、登录验证码

.net网页验证码、登录验证码

时间:2024-11-07 17:41:26浏览次数:1  
标签:网页 string res 验证码 private new net byte

来源:https://blog.csdn.net/Yuhang_Zhou/article/details/140614304
验证码辅助类

using System.Drawing;
using System.Drawing.Imaging;

namespace XCGApp
{
    /// <summary>
    /// 验证码辅助类
    /// </summary>
    public class ValidateCodeUtil
    {
        /// <summary>
        /// 验证码长度 
        /// </summary>
        public int CodeLen { get; set; }
        /// <summary>
        /// 验证码
        /// </summary>
        public string VCode { get; private set; }
        /// <summary>
        /// 验证码图像
        /// </summary>
        public Bitmap VCodeImg { get; private set; }

        private int fineness = 70;//图片清晰度  数值越大越清晰
        private int imgWidth = 48;//图片宽度
        private int imgHeight = 24;//图片高度 
        private int fontSize = 14;//字体大小
        private string fontFamily = "Microsoft YaHei";//字体名称

        /// <summary>
        /// 生成验证码 
        /// </summary>
        public string CreateVCode(int codeLen = 4)
        {
            CodeLen = codeLen;

            string vCode = "";
            Random random = new Random();
            for (int i = 0; i < CodeLen; i++)
            {
                int n = random.Next(10);
                vCode += n.ToString();
            }
            VCode = vCode;
            return vCode;
        }

        /// <summary>
        /// 验证码图像Byte
        /// </summary>
        /// <returns></returns>
        public byte[] GetCodeImgByte()
        {
            VCodeImg = new Bitmap(imgWidth, imgHeight);
            //生成像素点
            DrawPixel(VCodeImg);
            //绘制验证码图像
            DrewVCode(VCodeImg, VCode);
            //Bitmap转byte[]
            byte[] imgByte = BitmapToByte(VCodeImg);

            return imgByte;
        }
        /// <summary>
        /// 验证码图像Byte
        /// </summary>
        /// <returns></returns>
        public byte[] GetCodeImgByte(string code)
        {
            VCodeImg = new Bitmap(imgWidth, imgHeight);
            //生成像素点
            DrawPixel(VCodeImg);
            //绘制验证码图像
            DrewVCode(VCodeImg, code);
            //Bitmap转byte[]
            byte[] imgByte = BitmapToByte(VCodeImg);
            return imgByte;
        }

        /// <summary>
        /// 生成像素点
        /// </summary>
        private void DrawPixel(Bitmap bitmap)
        {
            Random random = new Random();
            for (int i = 0; i < bitmap.Width; i++)
            {
                for (int j = 0; j < bitmap.Height; j++)
                {
                    if (random.Next(90) <= fineness)
                        bitmap.SetPixel(i, j, Color.LightGray);
                }
            }
        }

        /// <summary>
        /// 绘制验证码图像 
        /// </summary>
        /// <param name="bitmap"></param>
        private void DrewVCode(Bitmap bitmap, string vCode)
        {
            Graphics g = Graphics.FromImage(bitmap);
            Font font = new Font(fontFamily, fontSize, FontStyle.Regular);
            g.DrawString(vCode, font, Brushes.Black, 0, 0);
        }

        /// <summary>
        /// Bitmap转byte[]
        /// </summary>
        private byte[] BitmapToByte(Bitmap bitmap)
        {
            MemoryStream ms = new MemoryStream();
            bitmap.Save(ms, ImageFormat.Bmp);
            byte[] imgByte = ms.GetBuffer();
            return imgByte;
        }
    }
}

api接口

[HttpGet]
public ActionResult ShowCode(string key)
{
    var codeObj = RedisUtil.GetRedis().Get(key);
    if (codeObj == null)
    {
        ApiResult res = new ApiResult()
        {
            Code = "-1",
            Message = "验证码失效,请刷新重试。"
        };
        return Json(res);
    }
    else
    {
        string vCode = codeObj.ToString();
        //生成验证码图像Byte
        ValidateCodeUtil validateCode = new ValidateCodeUtil();
        byte[] imgByte = validateCode.GetCodeImgByte(vCode);
        return File(imgByte, "image/jpeg");
    }
}

api接口生成验证码

[HttpPost]
public ApiResult GenerateValidateNo([FromBody]VCDto dto)
{
    ApiResult res = new ApiResult()
    {
        Code = "-1",
        Message = "请求失败"
    };
    try
    {
        if (!string.IsNullOrEmpty(dto.OldKey))
        {
            //移除旧验证码
            RedisUtil.GetRedis().Remove(dto.OldKey);
        }

        //验证码的RedisKey
        var guid = Guid.NewGuid().ToString().Replace("-", "");
        //生成验证码
        ValidateCodeUtil validateCode = new ValidateCodeUtil();
        string vCode = validateCode.CreateVCode();
        //保存进Redis,1分钟有效。
        RedisUtil.GetRedis().Insert(guid, vCode, DateTime.Now.AddMinutes(1));
        res.Code = "";
        res.Message = "OK";
        res.Data = guid;
        return res;
    }
    catch (Exception e)
    {
        res.Message = "验证码生成异常:" + e.Message;
        return res;
    }
}

vue前端<img id="imgvcode" ref="imgvcode" src="" @click="GetVerifyCode()" />

mounted() {
    this.GetVerifyCode();
},
methods: {
    GetVerifyCode() {
      let vcSrc = that.$refs.imgvcode.src;
      var q = vcSrc.match(new RegExp('[?&]' + 'key' + '=([^&#]*)'));
      let oldKey = (q && q[1]) || '';
      let para = { "OldKey": oldKey };
      PostRequestAPI("Test/GenerateValidateNo", para).then((res) => {
        if (res.Code == "") {
          that.form.validateCodeKey = res.Data;
          that.$refs.imgvcode.src = '/Test/ShowCode?key=' + res.Data;
        } else {
          alert(res.Message);
        }
      });
    },
}

 

标签:网页,string,res,验证码,private,new,net,byte
From: https://www.cnblogs.com/xsj1989/p/18533669

相关文章

  • dotnet core微服务框架Jimu ~ 会员注册微服务
     提供会员注册服务,用户必须注册成会员才能享受应用提供的服务,如浏览和发布新闻,但有些服务又需要指定角色的会员才能操作,如所有会员都可以浏览新闻,只有管理员(admin)角色的会员才可以发布新闻。有2个公开的api:CheckName:判断用户名是否可用;Register:根据用户名注册......
  • 使用AMD GPU进行图像分类的ResNet模型
    ResNetforimageclassificationusingAMDGPUs—ROCmBlogs2024年4月9日,作者:LoganGrado。在这篇博客中,我们演示了如何使用ROCm在AMDGPU上训练一个简单的ResNet模型来进行CIFAR10数据集的图像分类。在AMDGPU上训练ResNet模型非常简单,仅需安装ROCm和适当的PyTorch库,无......
  • Acunetix v24.9 发布下载,新增功能概览
    Acunetixv24.9(Linux,Windows)-Web应用程序安全测试Acunetix|WebApplicationSecurityScanner请访问原文链接:https://sysin.org/blog/acunetix/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org重要提示AcunetixPremium现在使用日历化版本命名。请注意,从......
  • 使用chromedriver抓取网页截图
    前提:1、电脑安装了谷歌浏览器2、下载chromedriver-win64,放到C:\ProgramFiles\Google\Chrome\chromedriver-win64  安装路径chromedriver-win64 下载地址:ChromeforTestingavailability3、importorg.apache.commons.io.FileUtils;importorg.openqa.selenium.Outp......
  • Windows Server 中的 NLB(Network Load Balancing,网络负载均衡)功能是一个用于将客户端
    WindowsServer中的NLB(NetworkLoadBalancing,网络负载均衡)功能是一个用于将客户端请求分配到多个服务器的技术,目的是提供高可用性和扩展性。NLB通过在多个服务器之间分配网络流量,确保应用程序或服务的高可用性,避免单点故障,并提高系统的处理能力。NLB通常用于需要高可用性和......
  • .Net Framework项目引用.NetStandard标准库出现版本冲突解决办法
    这几天在边学边用CommunityToolKit.MVVM,AutoCAD开发项目,在尝试验证输入参数时,程序加载遇到了问题:System.IO.FileNotFoundException:未能加载文件或程序集"System.ComponentModel.Annotations,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"或它的某一......
  • ndis.sys 是 Windows 操作系统中的一个关键系统文件,属于 网络驱动接口规范(NDIS,Network
    ndis.sys是Windows操作系统中的一个关键系统文件,属于网络驱动接口规范(NDIS,NetworkDriverInterfaceSpecification)的一部分。它是一个用于管理网络驱动程序和网络接口卡(NIC)之间通信的核心组件,主要负责网络设备驱动与操作系统的接口。具体来说,ndis.sys充当了操作系统与网络......
  • 48_api_intro_stock_fund_fundopenetfrealtime
    场内交易基金实时数据API数据接口多维数据查询指标,场内基金数据,每日实时数据。1.产品功能支持所有场内交易基金实时数据查询;实时数据,支持一次查询单个或所有基金数据;每个交易日16:00-23:00更新当日的最新场内交易基金净值数据;多数据源清洗整合,百万级数据毫秒级返回;......
  • 47_api_intro_stock_fund_fundopenetfhistory
    场内交易基金历史数据API数据接口多维数据查询指标,场内基金数据,全量历史数据。1.产品功能支持所有场内交易基金历史数据查询;历史数据,支持指定日期范围返回基金数据;多数据源清洗整合,百万级数据毫秒级返回;数据持续更新与维护;全接口支持HTTPS(TLSv1.0/v1.1/v1.2/v......
  • 京东创作平台旋转验证码识别
    昨天京东创作平台验证码又更新了,变成了这种旋转验证码。经过我们一天的努力,终于完成了这款验证码的数据标记,模型训练。现在正确率达到了几乎100%。识别代码只需要获取图片链接,下载图片得到原图,使用下面代码就可以识别角度,然后根据角度计算滑动距离,就可以自动完成验证impor......