.Net Core 实现图片验证码
记录自己的学习,参考了网上各位大佬的技术,往往在登录的时候需要使用到验证码来进行简单的一个校验,这边使用在.net core上进行生成图片4位数验证码
思路很简单=》 生成一个随机数-》保存到服务端Session-》生成随机码对应的图片给前端-》登录的时候进行校验(也可以在后端进行随机码的token加密,存到Cooick里面在前端进行校验)
备注:
- using System.DrawingCore;
- using System.DrawingCore.Imaging;
一定要引用DrawingCore不然在Linux上验证码图片是出不来的,项目会默认给你推荐System.Drawing
第一步:生成随机数
- private static string RndNum(int VcodeNum)
- {
- //验证码可以显示的字符集合
- 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" +
- ",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" +
- ",R,S,T,U,V,W,X,Y,Z";
- string[] VcArray = Vchar.Split(new Char[] { ',' });//拆分成数组
- string code = "";//产生的随机数
- int temp = -;//记录上次随机数值,尽量避避免生产几个一样的随机数
- Random rand = new Random();
- //采用一个简单的算法以保证生成随机数的不同
- for (int i = ; i < VcodeNum + ; i++)
- {
- if (temp != -)
- {
- rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));//初始化随机类
- }
- int t = rand.Next();//获取随机数
- if (temp != - && temp == t)
- {
- return RndNum(VcodeNum);//如果获取的随机数重复,则递归调用
- }
- temp = t;//把本次产生的随机数记录起来
- code += VcArray[t];//随机数的位数加一
- }
- return code;
- }
第二步:生成验证码图片
- public static MemoryStream Create(out string code, int numbers = )
- {
- code = RndNum(numbers);
- //Bitmap img = null;
- //Graphics g = null;
- MemoryStream ms = null;
- Random random = new Random();
- //验证码颜色集合
- 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", "宋体" };
- using (var img = new Bitmap((int)code.Length * , ))
- {
- using (var g = Graphics.FromImage(img))
- {
- g.Clear(Color.White);//背景设为白色
- //在随机位置画背景点
- for (int i = ; i < ; i++)
- {
- int x = random.Next(img.Width);
- int y = random.Next(img.Height);
- g.DrawRectangle(new Pen(Color.LightGray, ), x, y, , );
- }
- //验证码绘制在g中
- for (int i = ; i < code.Length; i++)
- {
- int cindex = random.Next();//随机颜色索引值
- int findex = random.Next();//随机字体索引值
- Font f = new Font(fonts[findex], , FontStyle.Bold);//字体
- Brush b = new SolidBrush(c[cindex]);//颜色
- int ii = ;
- if ((i + ) % == )//控制验证码不在同一高度
- {
- ii = ;
- }
- g.DrawString(code.Substring(i, ), f, b, + (i * ), ii);//绘制一个验证字符
- }
- ms = new MemoryStream();//生成内存流对象
- img.Save(ms, ImageFormat.Jpeg);//将此图像以Png图像文件的格式保存到流中
- }
- }
- return ms;
- }
第三步:控制器调用方法生成随机数图片之后,进行随机数的保存
- HttpContext.Session.SetString("LoginValidateCode", code);
备注:在使用Session的时候要进行Session服务的注册
在ConfigureServices中 services.AddSession();
在Configure中app.UseSession();
最后在前端进行验证码图片的绑定
- <img style="justify-content:center" id="code" src="/Users/Login/GetVerifyCode" />
点击图片进行验证码刷新
- function GetCode() {
- $.ajax({
- type: "GET",
- url: "/Users/Login/GetVerifyCode",
- data: {},
- dataType: "json",
- success: function (data) {
- },
- complete: function () {
- $("#code").attr('src', '/Users/Login/GetVerifyCode')
- }
- });
- }
.Net Core 实现图片验证码的更多相关文章
- dotnet Core 图片验证码
9102年了,.NET Core 2.x已经稳定,但是还是有很多人搞不定.NET Core的图片验证码. 下面说重点 1.引用Nuget包:System.Drawing.Common 2.像NET F ...
- Spring Security构建Rest服务-0800-Spring Security图片验证码
验证码逻辑 以前在项目中也做过验证码,生成验证码的代码网上有很多,也有一些第三方的jar包也可以生成漂亮的验证码.验证码逻辑很简单,就是在登录页放一个image标签,src指向一个controller ...
- 使用.Net Core 2.1开发Captcha图片验证码服务
更新后续篇:Captcha服务(后续1) 使用.Net Core 2.1开发Captcha验证码服务 开发工具:Visual Studio 2017 15.7.3 开发平台:64位 Windows 1 ...
- asp.net core 图片验证码,后台验证
验证方法: public static string VerificationCodeCacheFormat="vcode_cache_{0}"; public IActionRe ...
- [Asp.Net Core] 为什么选择 Blazor Server Side (一) 快速实现图片验证码
关于Blazor 由于在国内, Blazor一点都不普及, 建议读者翻看我之前写的随笔, 了解Blazor Server Side的特点. 在一段时间内, 我会写一些解说分析型的 "为什么选 ...
- Spingmvc项目注册登录图片验证码(比较灵活的验证码)
最近项目中注册模块要加一个图片验证码功能. 写下来记录下. 1:首先用什么实现,我用的servlet. 后台java代码:RandomValidateCode 类 ,这个类是生成随即验证码和干扰线,可 ...
- SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证
整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...
- ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)
关心最多的问题,不FQ能不能用,答案是能.Google官方提供额外的域名来提供服务,国内可以正常使用. 一. 前言 验证码在我们实际的生活场景中非常常见,可以防止恶意破解密码.刷票.论坛灌水.刷注册等 ...
- struts向网页输出图片验证码
前言:今天做个功能需要展示图片到页面,并不是下载,在网上搜了老半天,大部分都是下载,有的话也是只能在IE下进行输出,其它浏览器就都是下载了. Action代码: public String proce ...
随机推荐
- python实现经典冒泡算法
利用for循环,完成a=[1,7,4,89,34,2]的冒泡排序 冒泡排序:小的排在前,大的排在后面
- 编辑距离算法-DP问题
Levenshtein Distance The Levenshtein distance is a string metric for measuring the difference betwee ...
- [洛谷P4299] 首都
题目传送门 还是维护子树信息. 但是这里多了一个找重心的操作. 这里有一个关于树重心的结论,据说可以用反证法证明.反正我不会证 就是:新的重心一定在原来两个重心之间的那条树链上. 这样我们逐步缩小搜索 ...
- 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 ...
- django Highcharts制作图表--显示CPU使用率
Highcharts 是一个用纯JavaScript编写的一个图表库. Highcharts 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表 Highcharts 免费提供给个人学习 ...
- API网关Kong
官网:https://konghq.com/ 各种方式安装汇总:https://konghq.com/install/ 命令列表:https://docs.konghq.com/0.14.x/admi ...
- WEB端缓存机制
WEB端缓存机制 什么是WEB缓存 Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本.缓存会根据进来的请求保存输出内容的副本:当下一个请 ...
- 代工黑马,纬创如何强吞iPhone?
现在,智能手机市场非常得意兴阑珊,以苹果为首的最强大脑似乎再也想不出什么好的创意,iPhone7也只不过是旧机种的翻新款式,看上去跟一块板砖.一块镜子差不多:软体方面则出现了大批的"过度 ...
- Centos 7 使用Securecrt 配置Public key 登录
环境:Centos 7 SecureCRT 版本:8.0.4 需求:配置使用Public key 登录服务器禁用密码登录 1. 配置使用SecureCRT,生成Public key 跟私钥 2. 配置 ...
- CSS的五种定位方式
CSS中一共有五种定位: position:static:默认值 position:absolute:绝对定位 position:relative:相对对定位 position:fixed:固定定位 ...