C# 登陆验证码工具类VerifyCode

C# 登陆验证码工具类VerifyCodeusingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSystem.IO;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;…

大家好,又见面了,我是你们的朋友全栈君。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 落地页测试代码
{
    public class VerifyCode
    {
        public byte[] GetVerifyCode()
        {
            int codeW = 80;
            int codeH = 30;
            int fontSize = 16;
            string chkCode = string.Empty;
            //颜色列表,用于验证码、噪线、噪点 
            Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };
            //字体列表,用于验证码 
            string[] font = { "Times New Roman" };
            //验证码的字符集,去掉了一些容易混淆的字符 
            char[] character = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'd', 'e', 'f', 'h', 'k', 'm', 'n', 'r', 'x', 'y', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };
            Random rnd = new Random();
            //生成验证码字符串 
            for (int i = 0; i < 4; i++)
            {
                chkCode += character[rnd.Next(character.Length)];
            }
            //写入Session、验证码MD5加密
            WebHelper.WriteSession("nfine_session_verifycode", Md5.md5(chkCode.ToLower(), 16)); 
            //创建画布
            Bitmap bmp = new Bitmap(codeW, codeH);
            Graphics g = Graphics.FromImage(bmp);
            g.Clear(Color.White);
            //画噪线 
            for (int i = 0; i < 3; i++)
            {
                int x1 = rnd.Next(codeW);
                int y1 = rnd.Next(codeH);
                int x2 = rnd.Next(codeW);
                int y2 = rnd.Next(codeH);
                Color clr = color[rnd.Next(color.Length)];
                g.DrawLine(new Pen(clr), x1, y1, x2, y2);
            }
            //画验证码字符串 
            for (int i = 0; i < chkCode.Length; i++)
            {
                string fnt = font[rnd.Next(font.Length)];
                Font ft = new Font(fnt, fontSize);
                Color clr = color[rnd.Next(color.Length)];
                g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 18, (float)0);
            }
            //将验证码图片写入内存流,并将其以 "image/Png" 格式输出 
            MemoryStream ms = new MemoryStream();
            try
            {
                bmp.Save(ms, ImageFormat.Png);
                return ms.ToArray();
            }
            catch (Exception)
            {
                return null;
            }
            finally
            {
                g.Dispose();
                bmp.Dispose();
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/bin521/p/10569871.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159591.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 微服务中的日志管理 — ELK

    微服务中的日志管理 — ELK通过使用微服务,我们能够解决许多在单体应用中暴露的问题,并且它允许我们创建稳定的分布式应用程序,并对代码,团队规模,维护,发布周期,云计算等进行所需要的控制。但同时微服务也引入了一些挑战,例如分布式日志管理和查看。需要提供在众多服务中查看分布的完整事务日志和分布式调试的能力。实际上,挑战在于微服务是相互隔离的,它们不共享公共数据库和日志文件。随着微服务数量的增加以及我们使用自动化持续集成工具实现…

  • 解析this指针

    解析this指针要想明白为什么有this指针,我们先来看一看数据成员与成员函数之间的关系  每个对象中的数据成员都占有存储空间,如果一个类定义了n个对象的话,那么就有n个大小相等的空间来存放这n个对象的数据成员,但是不同的对象都调用同一个代码段。  那么问题来了!!!  当不同对象的成员函数引用数据成员时,怎么能够保证引用的是所指定的对象的数据成员呢?例如:设计一个长方体类

  • vps怎么传文件_服务器搭建vps

    vps怎么传文件_服务器搭建vpsvps搭建文件服务器内容精选换一换方法一:在VSCode上选择“文件>首选项>设置”,再选择“工作区”,并在输入框搜索“kunpeng.remote.ssh.machineinfo”,单击“在settings.json中编辑”后生成settings.json文件。如图1所示。生成settings.json文件方法二:在VSCode上选择“资源管理器”,找到“.vs例如main…

    2022年10月23日
  • 设置页数自增页眉/页脚——Word中page域代码的使用

    设置页数自增页眉/页脚——Word中page域代码的使用本博文讲述如何在word中设置如图PageXofY格式的页眉/页脚,使其跟随页数自增首先添加页眉,选择好页眉样式。然后在页眉处写上:Page敲一下Ctrl+F9,会出现一对花括号:Page{}在其中填写“PAGE”,花括号外打上“of”:Page{PAGE}of再敲一下Ctrl+F9,在后面的花括号写上“sectionpages”Page{PAGE}of{sectionpages}退出页眉,按Alt+F9即可√(有时候要按两次)…

  • route-map的原理及简单应用[通俗易懂]

    route-map的原理及简单应用[通俗易懂]route-map(路由策略)

  • 关系模型的相关术语[通俗易懂]

    关系模型的相关术语[通俗易懂]关系模型的相关术语

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号