ASP.NET MVC权限管理系实战之一验证码功能实现

1,权限的管理系统:开发项目必备的一个的功能;该项目使用 ASP.NET MVC5 SqlServer EF6 IOC容器 BoostStrap

2,登录界面验证码功能实现,整体效果如下;

3,接下来就是代码部分实现,前端页面;

cs 复制代码
 <div class="input-icon">
                        <i class="fa fa-lock"></i>
                        @Html.PasswordFor(m => m.CheckCode, new { @class = "form-control placeholder-no-fix", @autocomplete = "off", @placeholder = "请输入验证码" })
                        @Html.ValidationMessage("CheckCode", new { @style = "color: red" })
                    </div>
                </div>
                <div class="form-group">
                    <img style="border-radius: 7px; height: 40px;" alt="验证码图片" class="img" onclick="refresh(this)" src="/Account/VerifyCode" title="点击刷新">
                </div>

js代码在页面刷新或者点击验证码时自动生成新的验证码

cs 复制代码
 <script type="text/javascript">
        function refresh(obj) {
            $(obj).attr("src", "/Account/VerifyCode?random=" + Math.random());
        }
    </script>

4,控制器代码

cs 复制代码
  public void VerifyCode()
        {
            string code = string.Empty;
            Bitmap bitmap = VerifyCodeHelper.CreateVerifyCode(out code);
            base.HttpContext.Session["CheckCode"] = code;
            bitmap.Save(base.Response.OutputStream, ImageFormat.Gif);
            base.Response.ContentType = "image/gif";
        }

5,生成验证码的核心代码 CreateVerifyCode方法如下;

cs 复制代码
 public class VerifyCodeHelper
    {
        public static Bitmap CreateVerifyCode(out string code)
        {
            //建立Bitmap对象,绘图
            Bitmap bitmap = new Bitmap(200, 60);
            Graphics graph = Graphics.FromImage(bitmap);
            graph.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60);
            Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);
            Random r = new Random();
            string letters = "ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789";

            StringBuilder sb = new StringBuilder();

            //添加随机的五个字母
            for (int x = 0; x < 5; x++)
            {
                string letter = letters.Substring(r.Next(0, letters.Length - 1), 1);
                sb.Append(letter);
                graph.DrawString(letter, font, new SolidBrush(Color.Black), x * 38, r.Next(0, 15));
            }
            code = sb.ToString();

            //混淆背景
            Pen linePen = new Pen(new SolidBrush(Color.Black), 2);
            for (int x = 0; x < 6; x++)
                graph.DrawLine(linePen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
            return bitmap;
        }
    }

以上就是实现验证码的全部,谢谢!

相关推荐
Marktowin5 小时前
Mybatis-Plus更新操作时的一个坑
java·后端
赵文宇5 小时前
CNCF Dragonfly 毕业啦!基于P2P的镜像和文件分发系统快速入门,在线体验
后端
程序员爱钓鱼6 小时前
Node.js 编程实战:即时聊天应用 —— WebSocket 实现实时通信
前端·后端·node.js
Libby博仙6 小时前
Spring Boot 条件化注解深度解析
java·spring boot·后端
源代码•宸7 小时前
Golang原理剖析(Map 源码梳理)
经验分享·后端·算法·leetcode·golang·map
小周在成长7 小时前
动态SQL与MyBatis动态SQL最佳实践
后端
瓦尔登湖懒羊羊7 小时前
TCP的自我介绍
后端
小周在成长7 小时前
MyBatis 动态SQL学习
后端
子非鱼9217 小时前
SpringBoot快速上手
java·spring boot·后端