记录自己的学习,参考了网上各位大佬的技术,往往在登录的时候需要使用到验证码来进行简单的一个校验,这边使用在.net core上进行生成图片4位数验证码

思路很简单=》 生成一个随机数-》保存到服务端Session-》生成随机码对应的图片给前端-》登录的时候进行校验(也可以在后端进行随机码的token加密,存到Cooick里面在前端进行校验)

备注:

  1. using System.DrawingCore;
  2. using System.DrawingCore.Imaging;

一定要引用DrawingCore不然在Linux上验证码图片是出不来的,项目会默认给你推荐System.Drawing

第一步:生成随机数

  1. private static string RndNum(int VcodeNum)
  2. {
  3. //验证码可以显示的字符集合
  4. 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" +
  5. ",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" +
  6. ",R,S,T,U,V,W,X,Y,Z";
  7. string[] VcArray = Vchar.Split(new Char[] { ',' });//拆分成数组
  8. string code = "";//产生的随机数
  9. int temp = -;//记录上次随机数值,尽量避避免生产几个一样的随机数
  10.  
  11. Random rand = new Random();
  12. //采用一个简单的算法以保证生成随机数的不同
  13. for (int i = ; i < VcodeNum + ; i++)
  14. {
  15. if (temp != -)
  16. {
  17. rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));//初始化随机类
  18. }
  19. int t = rand.Next();//获取随机数
  20. if (temp != - && temp == t)
  21. {
  22. return RndNum(VcodeNum);//如果获取的随机数重复,则递归调用
  23. }
  24. temp = t;//把本次产生的随机数记录起来
  25. code += VcArray[t];//随机数的位数加一
  26. }
  27. return code;
  28. }

第二步:生成验证码图片

  1. public static MemoryStream Create(out string code, int numbers = )
  2. {
  3. code = RndNum(numbers);
  4. //Bitmap img = null;
  5. //Graphics g = null;
  6. MemoryStream ms = null;
  7. Random random = new Random();
  8. //验证码颜色集合
  9. Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
  10.  
  11. //验证码字体集合
  12. string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
  13.  
  14. using (var img = new Bitmap((int)code.Length * , ))
  15. {
  16. using (var g = Graphics.FromImage(img))
  17. {
  18. g.Clear(Color.White);//背景设为白色
  19.  
  20. //在随机位置画背景点
  21. for (int i = ; i < ; i++)
  22. {
  23. int x = random.Next(img.Width);
  24. int y = random.Next(img.Height);
  25. g.DrawRectangle(new Pen(Color.LightGray, ), x, y, , );
  26. }
  27. //验证码绘制在g中
  28. for (int i = ; i < code.Length; i++)
  29. {
  30. int cindex = random.Next();//随机颜色索引值
  31. int findex = random.Next();//随机字体索引值
  32. Font f = new Font(fonts[findex], , FontStyle.Bold);//字体
  33. Brush b = new SolidBrush(c[cindex]);//颜色
  34. int ii = ;
  35. if ((i + ) % == )//控制验证码不在同一高度
  36. {
  37. ii = ;
  38. }
  39. g.DrawString(code.Substring(i, ), f, b, + (i * ), ii);//绘制一个验证字符
  40. }
  41. ms = new MemoryStream();//生成内存流对象
  42. img.Save(ms, ImageFormat.Jpeg);//将此图像以Png图像文件的格式保存到流中
  43. }
  44. }
  45.  
  46. return ms;
  47. }

第三步:控制器调用方法生成随机数图片之后,进行随机数的保存

  1. HttpContext.Session.SetString("LoginValidateCode", code);

备注:在使用Session的时候要进行Session服务的注册

在ConfigureServices中 services.AddSession();

在Configure中app.UseSession();

最后在前端进行验证码图片的绑定

  1. <img style="justify-content:center" id="code" src="/Users/Login/GetVerifyCode" />

点击图片进行验证码刷新

  1. function GetCode() {
  2. $.ajax({
  3. type: "GET",
  4. url: "/Users/Login/GetVerifyCode",
  5. data: {},
  6. dataType: "json",
  7. success: function (data) {
  8. },
  9. complete: function () {
  10. $("#code").attr('src', '/Users/Login/GetVerifyCode')
  11. }
  12. });
  13. }

.Net Core 实现图片验证码的更多相关文章

  1. dotnet Core 图片验证码

    9102年了,.NET Core 2.x已经稳定,但是还是有很多人搞不定.NET Core的图片验证码. 下面说重点 1.引用Nuget包:System.Drawing.Common 2.像NET F ...

  2. Spring Security构建Rest服务-0800-Spring Security图片验证码

    验证码逻辑 以前在项目中也做过验证码,生成验证码的代码网上有很多,也有一些第三方的jar包也可以生成漂亮的验证码.验证码逻辑很简单,就是在登录页放一个image标签,src指向一个controller ...

  3. 使用.Net Core 2.1开发Captcha图片验证码服务

    更新后续篇:Captcha服务(后续1) 使用.Net Core 2.1开发Captcha验证码服务 开发工具:Visual Studio 2017 15.7.3 开发平台:64位 Windows 1 ...

  4. asp.net core 图片验证码,后台验证

    验证方法: public static string VerificationCodeCacheFormat="vcode_cache_{0}"; public IActionRe ...

  5. [Asp.Net Core] 为什么选择 Blazor Server Side (一) 快速实现图片验证码

    关于Blazor 由于在国内, Blazor一点都不普及, 建议读者翻看我之前写的随笔, 了解Blazor Server Side的特点. 在一段时间内, 我会写一些解说分析型的 "为什么选 ...

  6. Spingmvc项目注册登录图片验证码(比较灵活的验证码)

    最近项目中注册模块要加一个图片验证码功能. 写下来记录下. 1:首先用什么实现,我用的servlet. 后台java代码:RandomValidateCode 类 ,这个类是生成随即验证码和干扰线,可 ...

  7. SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证

    整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...

  8. ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)

    关心最多的问题,不FQ能不能用,答案是能.Google官方提供额外的域名来提供服务,国内可以正常使用. 一. 前言 验证码在我们实际的生活场景中非常常见,可以防止恶意破解密码.刷票.论坛灌水.刷注册等 ...

  9. struts向网页输出图片验证码

    前言:今天做个功能需要展示图片到页面,并不是下载,在网上搜了老半天,大部分都是下载,有的话也是只能在IE下进行输出,其它浏览器就都是下载了. Action代码: public String proce ...

随机推荐

  1. python实现经典冒泡算法

    利用for循环,完成a=[1,7,4,89,34,2]的冒泡排序 冒泡排序:小的排在前,大的排在后面

  2. 编辑距离算法-DP问题

    Levenshtein Distance The Levenshtein distance is a string metric for measuring the difference betwee ...

  3. [洛谷P4299] 首都

    题目传送门 还是维护子树信息. 但是这里多了一个找重心的操作. 这里有一个关于树重心的结论,据说可以用反证法证明.反正我不会证 就是:新的重心一定在原来两个重心之间的那条树链上. 这样我们逐步缩小搜索 ...

  4. Spring 错误 cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'context:property-placeholder'.

    我来说下这个出错的原因吧 eclise中xsd的验证问题Description Resource Path Location Type cvc-complex-type.2.4.c: The matc ...

  5. django Highcharts制作图表--显示CPU使用率

    Highcharts 是一个用纯JavaScript编写的一个图表库. Highcharts 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表 Highcharts 免费提供给个人学习 ...

  6. API网关Kong

    官网:https://konghq.com/ 各种方式安装汇总:https://konghq.com/install/ 命令列表:https://docs.konghq.com/0.14.x/admi ...

  7. WEB端缓存机制

    WEB端缓存机制 什么是WEB缓存 Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本.缓存会根据进来的请求保存输出内容的副本:当下一个请 ...

  8. 代工黑马,纬创如何强吞iPhone?

    ​ 现在,智能手机市场非常得意兴阑珊,以苹果为首的最强大脑似乎再也想不出什么好的创意,iPhone7也只不过是旧机种的翻新款式,看上去跟一块板砖.一块镜子差不多:软体方面则出现了大批的"过度 ...

  9. Centos 7 使用Securecrt 配置Public key 登录

    环境:Centos 7 SecureCRT 版本:8.0.4 需求:配置使用Public key 登录服务器禁用密码登录 1. 配置使用SecureCRT,生成Public key 跟私钥 2. 配置 ...

  10. CSS的五种定位方式

    CSS中一共有五种定位: position:static:默认值 position:absolute:绝对定位 position:relative:相对对定位 position:fixed:固定定位 ...