当前位置: 首页 > news >正文

.NET MVC 验证码

 // 随机生成指定长度的验证码字符串
        public ActionResult GetValidateCode(string key)
        {
            string codeStr = GetRandomCode();
            TempData[key] = codeStr;
            return File(GetVCode(codeStr), "image/gif");
        }

        private static Color BackColor = Color.White;
        private static int Width = 75;
        private static int Height = 30;
        private Random _random;

        private int _brushNameIndex;

        public byte[] GetVCode(string codeStr)
        {
            _random = new Random();
            using (Bitmap img = new Bitmap(Width, Height))
            {
                using (Graphics g = Graphics.FromImage(img))
                {
                    g.Clear(BackColor);//绘画背景颜色 
                    Paint_Text(g, codeStr);// 绘画文字 
                    Paint_TextStain(img);// 绘画噪音点
                    g.DrawRectangle(Pens.DarkGray, 0, 0, Width - 1, Height - 1);//绘画边框
                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                    {
                        //将图片 保存到内存流中
                        img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                        //将内存流 里的 数据  转成 byte 数组 返回
                        return ms.ToArray();
                    }
                }
            }
        }

        /// <summary>
        /// 绘画文字
        /// </summary>
        /// <param name="g"></param>
        private void Paint_Text(Graphics g, string code)
        {
            g.DrawString(code, GetFont(), GetBrush(), 5, 5);
        }

        /// <summary>
        /// 绘画文字噪音点
        /// </summary>
        /// <param name="g"></param>
        private void Paint_TextStain(Bitmap b)
        {
            string[] BrushName = new string[] {       "OliveDrab",
                                                  "ForestGreen",
                                                  "DarkCyan",
                                                  "LightSlateGray",
                                                  "RoyalBlue",
                                                  "SlateBlue",
                                                  "DarkViolet",
                                                  "MediumVioletRed",
                                                  "IndianRed",
                                                  "Firebrick",
                                                  "Chocolate",
                                                  "Peru", 
                                             };

            for (int n = 0; n < 480; n++)
            {
                b.SetPixel(_random.Next(Width), _random.Next(Height), Color.FromName(BrushName[_brushNameIndex]));
            }
        }

        /// <summary>
        /// 随机取一个字体
        /// </summary>
        /// <returns></returns>
        private Font GetFont()
        {
            string[] FontItems = new string[] { "Arial", "Helvetica", "Geneva", "sans-serif", "Verdana" };
            int fontIndex = _random.Next(0, FontItems.Length);
            FontStyle fontStyle = GetFontStyle(_random.Next(0, 2));
            return new Font(FontItems[fontIndex], 15, fontStyle);
        }

        /// <summary>
        /// 随机取一个笔刷
        /// </summary>
        /// <returns></returns>
        private Brush GetBrush()
        {
            Brush[] BrushItems = new Brush[]{   Brushes.OliveDrab,
                                            Brushes.ForestGreen,
                                            Brushes.DarkCyan,
                                            Brushes.LightSlateGray,
                                            Brushes.RoyalBlue,
                                            Brushes.SlateBlue,
                                            Brushes.DarkViolet,
                                            Brushes.MediumVioletRed,
                                            Brushes.IndianRed,
                                            Brushes.Firebrick,
                                            Brushes.Chocolate,
                                            Brushes.Peru, 
                                            };

            int brushIndex = _random.Next(0, BrushItems.Length);
            _brushNameIndex = brushIndex;
            return BrushItems[brushIndex];
        }

        /// <summary>
        /// 取一个字体的样式
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        private FontStyle GetFontStyle(int index)
        {
            switch (index)
            {
                case 0:
                    return FontStyle.Bold;
                case 1:
                    return FontStyle.Italic;
                default:
                    return FontStyle.Regular;
            }
        }


        /// <summary>
        /// 取得一个 5 位的随机码
        /// </summary>
        /// <returns></returns>
        public string GetRandomCode(int len = 5)
        {
            return Guid.NewGuid().ToString().Substring(0, len);
        }

 

转载于:https://www.cnblogs.com/Jacob-Wu/p/10183268.html

相关文章:

  • Prior Posterior和Likelihood的理解与几种表达方式
  • jQuery.extend 函数使用
  • SpringBoot 缓存01
  • 生活总结
  • 「新手必看」Python+Opencv实现摄像头调用RGB图像并转换成HSV模型
  • Python判断字符串1234321是不是回文
  • Spring 梳理 - @Autowired VS @Resource
  • 扩展
  • linux安装mysql以及修改密码和重启mysql等相关命令
  • http状态码的含义及502, 503和504的区别
  • Quartz.Net进阶之六:详述 JobStores
  • DB-MySQL:MySQL 处理重复数据
  • 【[HEOI2016/TJOI2016]游戏】
  • iOS调用系统发送短信和邮件分享
  • ORM简介
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • CSS 三角实现
  • HTTP请求重发
  • jquery cookie
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • nginx 负载服务器优化
  • Redis中的lru算法实现
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • spring boot 整合mybatis 无法输出sql的问题
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 类orAPI - 收藏集 - 掘金
  • 离散点最小(凸)包围边界查找
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 网页视频流m3u8/ts视频下载
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 智能合约Solidity教程-事件和日志(一)
  • elasticsearch-head插件安装
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define用法
  • (2)(2.10) LTM telemetry
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (十六)Flask之蓝图
  • (四)汇编语言——简单程序
  • (一)认识微服务
  • .NET Remoting学习笔记(三)信道
  • .net6 webapi log4net完整配置使用流程
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [51nod1610]路径计数
  • [Android View] 可绘制形状 (Shape Xml)
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能
  • [HEOI2013]ALO
  • [iOS]GCD(一)
  • [leetcode]Flatten Binary Tree to Linked List