全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

我们在项目中的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>

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


# MVC  # 新闻网站  # 验证码  # MVC+EasyUI+三层新闻网站建立 建站准备工作(一)  # MVC+EasyUI+三层新闻网站建立 主页布局的方法(五)  # MVC+EasyUI+三层新闻网站建立 实现登录功能(四)  # MVC+EasyUI+三层新闻网站建立 后台登录界面的搭建(二)  # 一步步打造简单的MVC电商网站BooksStore(2)  # 一步步打造简单的MVC电商网站BooksStore(1)  # MVC4制作网站教程第四章 更新栏目4.3  # MVC4制作网站教程第四章 浏览栏目4.2  # MVC4制作网站教程第四章 添加栏目4.1  # MVC+EasyUI+三层新闻网站建立 tabs标签制作方法(六)  # 清空  # 背景色  # 这是  # 要做  # 要先  # 就叫  # 建立一个  # 名字叫  # 升级版  # 大家多多  # 去把  # 就可以  # 新建一个  # 类库  # ToString  # numLength  # Length  # context  # page 


相关文章: 建站之星CMS建站配置指南:模板选择与SEO优化技巧  如何在七牛云存储上搭建网站并设置自定义域名?  音响网站制作视频教程,隆霸音响官方网站?  定制建站方案优化指南:企业官网开发与建站费用解析  TestNG的testng.xml配置文件怎么写  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  内部网站制作流程,如何建立公司内部网站?  想学网站制作怎么学,建立一个网站要花费多少?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何通过IIS搭建网站并配置访问权限?  如何快速搭建高效WAP手机网站?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  网站app免费制作软件,能免费看各大网站视频的手机app?  建站之星如何快速解决建站难题?  建站之星2.7模板:企业网站建设与h5定制设计专题  教程网站设计制作软件,怎么创建自己的一个网站?  ,购物网站怎么盈利呢?  如何通过wdcp面板快速创建网站?  如何通过NAT技术实现内网高效建站?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  建站之星代理费用多少?最新价格详情介绍  建站VPS配置与SEO优化指南:关键词排名提升策略  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  建站之星收费标准详解:套餐费用及年费价格表一览  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  建站之星CMS五站合一模板配置与SEO优化指南  深圳网站制作的公司有哪些,dido官方网站?  金*站制作公司有哪些,金华教育集团官网?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何快速重置建站主机并恢复默认配置?  制作企业网站建设方案,怎样建设一个公司网站?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  简单实现Android文件上传  红河网站制作公司,红河事业单位身份证如何上传?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  寿县云建站:智能SEO优化与多行业模板快速上线指南  如何用西部建站助手快速创建专业网站?  建站DNS解析失败?如何正确配置域名服务器?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何在阿里云通过域名搭建网站?  宝塔面板如何快速创建新站点?  如何通过服务器快速搭建网站?完整步骤解析  如何选择网络建站服务器?高效建站必看指南  建站之星如何实现PC+手机+微信网站五合一建站?  制作国外网站的软件,国外有哪些比较优质的网站推荐? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。