• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > MVC+EasyUI+三层新闻网站建立 验证码生成(三)

MVC+EasyUI+三层新闻网站建立 验证码生成(三)

作者:刘指导 字体:[增加 减小] 来源:互联网 时间:2018-08-20

刘指导 通过本文主要向大家介绍了MVC,新闻网站,验证码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我们在项目中的NewWeb.Common类库里面建立一个类用来存放生成验证码的代码。

这里我类的名字叫 ValidateCode

生成验证码(ValidateCode)类的代码:

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

namespace NewWeb.Common
{
  public class ValidateCode
  {
      public ValidateCode()
      {
      }
      /// <summary>
      /// 验证码的最大长度
      /// </summary>
      public int MaxLength
      {
        get { return 10; }
      }
      /// <summary>
      /// 验证码的最小长度
      /// </summary>
      public int MinLength
      {
        get { return 1; }
      }
      /// <summary>
      /// 生成验证码
      /// </summary>
      /// <param name="length">指定验证码的长度</param>
      /// <returns></returns>
      public string CreateValidateCode(int length)
      {
        int[] randMembers = new int[length];
        int[] validateNums = new int[length];
        string validateNumberStr = "";
        //生成起始序列值
        int seekSeek = unchecked((int)DateTime.Now.Ticks);
        Random seekRand = new Random(seekSeek);
        int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
        int[] seeks = new int[length];
        for (int i = 0; i < length; i++)
        {
          beginSeek += 10000;
          seeks[i] = beginSeek;
        }
        //生成随机数字
        for (int i = 0; i < length; i++)
        {
          Random rand = new Random(seeks[i]);
          int pownum = 1 * (int)Math.Pow(10, length);
          randMembers[i] = rand.Next(pownum, Int32.MaxValue);
        }
        //抽取随机数字
        for (int i = 0; i < length; i++)
        {
          string numStr = randMembers[i].ToString();
          int numLength = numStr.Length;
          Random rand = new Random();
          int numPosition = rand.Next(0, numLength - 1);
          validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
        }
        //生成验证码
        for (int i = 0; i < length; i++)
        {
          validateNumberStr += validateNums[i].ToString();
        }
        return validateNumberStr;
      }
      /// <summary>
      /// 创建验证码的图片
      /// </summary>
      /// <param name="context">要输出到的page对象</param>
      /// <param name="validateNum">验证码</param>
      public void CreateValidateGraphic(string validateCode, HttpContext context)
      {
        Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
        Graphics g = Graphics.FromImage(image);
        try
        {
          //生成随机生成器
          Random random = new Random();
          //清空图片背景色
          g.Clear(Color.White);
          //画图片的干扰线
          for (int i = 0; i < 25; i++)
          {
            int x1 = random.Next(image.Width);
            int x2 = random.Next(image.Width);
            int y1 = random.Next(image.Height);
            int y2 = random.Next(image.Height);
            g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
          }
          Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
          LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
           Color.Blue, Color.DarkRed, 1.2f, true);
          g.DrawString(validateCode, font, brush, 3, 2);
          //画图片的前景干扰点
          for (int i = 0; i < 100; i++)
          {
            int x = random.Next(image.Width);
            int y = random.Next(image.Height);
            image.SetPixel(x, y, Color.FromArgb(random.Next()));
          }
          //画图片的边框线
          g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
          //保存图片数据
          MemoryStream stream = new MemoryStream();
          image.Save(stream, ImageFormat.Jpeg);
          //输出图片流
          context.Response.Clear();
          context.Response.ContentType = "image/jpeg";
          context.Response.BinaryWrite(stream.ToArray());
        }
        finally
        {
          g.Dispose();
          image.Dispose();
        }
      }
      /// <summary>
      /// 得到验证码图片的长度
      /// </summary>
      /// <param name="validateNumLength">验证码的长度</param>
      /// <returns></returns>
      public static int GetImageWidth(int validateNumLength)
      {
        return (int)(validateNumLength * 12.0);
      }
      /// <summary>
      /// 得到验证码的高度
      /// </summary>
      /// <returns></returns>
      public static double GetImageHeight()
      {
        return 22.5;
      }


      //C# MVC 升级版
      /// <summary>
      /// 创建验证码的图片
      /// </summary>
      /// <param name="containsPage">要输出到的page对象</param>
      /// <param name="validateNum">验证码</param>
      public byte[] CreateValidateGraphic(string validateCode)
      {
        Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
        Graphics g = Graphics.FromImage(image);
        try
        {
          //生成随机生成器
          Random random = new Random();
          //清空图片背景色
          g.Clear(Color.White);
          //画图片的干扰线
          for (int i = 0; i < 25; i++)
          {
            int x1 = random.Next(image.Width);
            int x2 = random.Next(image.Width);
            int y1 = random.Next(image.Height);
            int y2 = random.Next(image.Height);
            g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
          }
          Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
          LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
           Color.Blue, Color.DarkRed, 1.2f, true);
          g.DrawString(validateCode, font, brush, 3, 2);
          //画图片的前景干扰点
          for (int i = 0; i < 100; i++)
          {
            int x = random.Next(image.Width);
            int y = random.Next(image.Height);
            image.SetPixel(x, y, Color.FromArgb(random.Next()));
          }
          //画图片的边框线
          g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
          //保存图片数据
          MemoryStream stream = new MemoryStream();
          image.Save(stream, ImageFormat.Jpeg);
          //输出图片流
          return stream.ToArray();
        }
        finally
        {
          g.Dispose();
          image.Dispose();
        }
      }
    }
  
}

这时需要在程序中引入两个命名空间 System.Drawing和System.Web。

完成之后到LoginController控制器里面去新建一个ActionResult   就叫ValidateCode 用于生成验证码。(这里要先对NewWeb.Common引用)

生成验证码代码如下:

 public ActionResult ValidateCode()
    {
      Common.ValidateCode validateCode = new Common.ValidateCode();
      string code = validateCode.CreateValidateCode(4); //生成的验证码4个长度
      Session["validateCode"] = code;
      byte[] buffer = validateCode.CreateValidateGraphic(code);//创建验证码图片
      return File(buffer, "image/jpeg");//返回图片
    }

到Login视图里面的index页面去把img的src补充为:

 <tr>
   <td style="width:20px"></td>
    <td><img id="image" src="/Login/ValidateCode/?id=1" style="float: left; height: 24px;" /></td>
    <td><a href="javascript:void(0)" onclick="changeCheckCode();return false;">看不清,换一张</a></td>
</tr>

就可以看到页面上面显示出来验证码

下面要做的就是点击切换验证码,这是通过js实现的代码

 <script type="text/javascript">
    $(function () {
      
      initWin(); //初始化登录窗体
      changeCheckCode(); //切换验证码
    });
    function initWin() {
      $("#win").window({
        title: "登录",
        width: 400,
        height: 270,
        collapsible: false,
        minimizable: false,
        maximizable: false,
        closable: false,
        modal: true,
        resizable: false,
      });
      
    }
    //切换验证码
    function changeCheckCode() {
      $("#changeVcode").click(function () {
        $("#image").attr("src", $("#image").attr("src") + 1);
      });
    }
  </script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MVC HtmlHelper扩展类(PagingHelper)实现分页功能
  • 使用asp.net mvc,boostrap及knockout.js开发微信自定义菜单编辑工具(推荐)
  • 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定
  • ASP.NET Core发送邮件的方法
  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)
  • ASP.NET MVC从视图传参到控制器的几种形式
  • Asp.net core WebApi 使用Swagger生成帮助页实例
  • ASP.NET core Web中使用appsettings.json配置文件的方法
  • MVC页面之间参数传递解析
  • VS2017添加EF的MVC控制器报错的解决方法

相关文章

  • 2017-05-11asp.net 动态生成控件并获取其值
  • 2017-05-11C#.Net 学习笔记(一)
  • 2017-05-11分享下Asp.Net面试题目及答案集合
  • 2017-05-11ASP.NET中制作各种3D图表的方法
  • 2017-05-11Ibatis.net结合oracle批量删除实现代码
  • 2017-05-11C# 无限级分类的实现
  • 2017-05-11listview里的button事件添加方法
  • 2017-05-11asp.net 分页sql语句(结合aspnetpager)
  • 2017-05-11asp.net INI文件读写类
  • 2017-05-11asp.net 通过httpModule计算页面的执行时间

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.net中gridview的查询、分页、编辑更新、删除的实例代码
    • ASP.NET MVC学习教程之Razor语法
    • 利用asp.net实现生成不重复订单号
    • 总结十条.NET异常处理建议
    • C#调用动态unlha32.dll解压Lha后缀的打包文件分享
    • HTTP错误500.19解决方法(定义了重复的节点)
    • asp.net 自定义控件实现无刷新上传图片,立即显示缩略图,保存图片缩略图
    • ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录 原创
    • 浅谈ASP.NET Core 2.0 中间件(译)
    • 一步步教你读懂NET中IL(图文详解)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有