TNBLOG
首页
博客
视频
资源
问答
猿趣
手机
关于
搜索
收藏
便签
笔记
消息
创作
登录
剑轩
故如虹,知恩;故如月,知明
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
CSS
15篇
微服务
41篇
Git
14篇
.NET
102篇
移动开发
33篇
软件架构
23篇
.NET Core
119篇
.NET MVC
11篇
英语
3篇
随笔
86篇
Bootstrap
3篇
Redis
21篇
编辑器
10篇
Js相关
15篇
虚拟化
8篇
更多
Oracle
7篇
Python
14篇
数据库
26篇
EF
17篇
微信
3篇
前端
151篇
消息队列
6篇
docker
41篇
多线程
1篇
Java
4篇
软件基础
2篇
C++
2篇
WCF
7篇
Linux
7篇
nginx
5篇
K8S
9篇
ABP
2篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
handler实现计算式的验证码
3843
人阅读
2019/8/14 17:06
总访问:
3921918
评论:
0
收藏:
0
手机
分类:
.NET
[handler实现一个简单的验证码](https://www.tnblog.net/aojiancc2/article/details/2567) 就是一个很简单的计算式验证码: ![](https://img.tnblog.net/arcimg/aojiancc2/b4d78113e38d4943b67309f6379e5fa6.jpg) 其实这种验证码很简单,就是随机参数两个数字在随机一下计算的方法即可,代码如下: ``` public class NumberCheckHandler : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //创建一个空的图片 Bitmap bitmap = new Bitmap(100, 40); //根据图片创建一个画图的工具类 Graphics graphics = Graphics.FromImage(bitmap); Font font = new Font("宋体", 15); SolidBrush solidBrush = new SolidBrush(Color.White); graphics.FillRectangle(new SolidBrush(Color.Black), 0, 0, 100, 36); //随机,大小写,数字 List<int> codeList = new List<int>(); //大小写的范围 for (int i = 97, j = 65; i < 123; i++, j++) { codeList.Add(i); codeList.Add(j); } //数字 for (int i = 48; i < 58; i++) { codeList.Add(i); } Random random = new Random(); int number1 = random.Next(1, 30); int number2 = random.Next(1, 30); //存放算式的键值对 Dictionary<int, string> dic = new Dictionary<int, string>(); dic.Add(1, "+"); dic.Add(2, "-"); dic.Add(3, "*"); //存放结果的键值对 Dictionary<int, int> dic_result = new Dictionary<int, int>(); dic_result.Add(1, number1 + number2); dic_result.Add(2, number1 - number2); dic_result.Add(3, number1 * number2); //随机取一种算法 int type = random.Next(1, 4); //计算式 string cal = number1 + dic[type] + number2 + "=?"; //把图片验证码的结果存储在session,为了方便进行和用户输入内容匹配 context.Session["code"] = dic_result[type]; graphics.DrawString(cal, font, solidBrush, 25, 8); Pen pen = new Pen(solidBrush, 1); //产生干扰-三条直线 //for (int i = 0; i < 4; i++) //{ // graphics.DrawLine(pen, random.Next(0, 100), random.Next(0, 36), random.Next(0, 100), random.Next(0, 36)); //} ////产生干扰-生成更小的随机内容 //for (int i = 0; i < 8; i++) //{ // int ranIndex = random.Next(0, codeList.Count); // char rchar = (char)codeList[ranIndex]; // graphics.DrawString(rchar + "", new Font("宋体", 8), solidBrush, random.Next(0, 100), random.Next(0, 36)); //} //输出图片 bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); } public bool IsReusable { get { return false; } } } ``` 但是这里还是想说一下,就是我们常规的做法是很喜欢判断,比如判断如果是加应该怎么做,如果是减又会怎么做,这里我们说一下怎么不用判断来实现这个东西其实就是键值对就行了, ![](https://img.tnblog.net/arcimg/aojiancc2/6016fa2f3fae40e0a151463087f051ff.jpg) 我这里用了两个键值对,一个存放算式用来显示给用户,一个存放结果用户自己存储在session里边方便和用户输入的对比。其实用一个键值对也可以的,把值存储一个对象,包含这两个值就行了,或者使用lambda也行,但是这里更应该思考一下如何不使用lamdba也能做到
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}