最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MVC+EasyUI+三層新聞網(wǎng)站建立 驗(yàn)證碼生成(三)

 更新時(shí)間:2017年07月06日 11:48:08   作者:劉指導(dǎo)  
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第三篇,教大家如何生成驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

我們?cè)陧?xiàng)目中的NewWeb.Common類庫里面建立一個(gè)類用來存放生成驗(yàn)證碼的代碼。

這里我類的名字叫 ValidateCode

生成驗(yàn)證碼(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>
      /// 驗(yàn)證碼的最大長(zhǎng)度
      /// </summary>
      public int MaxLength
      {
        get { return 10; }
      }
      /// <summary>
      /// 驗(yàn)證碼的最小長(zhǎng)度
      /// </summary>
      public int MinLength
      {
        get { return 1; }
      }
      /// <summary>
      /// 生成驗(yàn)證碼
      /// </summary>
      /// <param name="length">指定驗(yàn)證碼的長(zhǎng)度</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;
        }
        //生成隨機(jī)數(shù)字
        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);
        }
        //抽取隨機(jī)數(shù)字
        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));
        }
        //生成驗(yàn)證碼
        for (int i = 0; i < length; i++)
        {
          validateNumberStr += validateNums[i].ToString();
        }
        return validateNumberStr;
      }
      /// <summary>
      /// 創(chuàng)建驗(yàn)證碼的圖片
      /// </summary>
      /// <param name="context">要輸出到的page對(duì)象</param>
      /// <param name="validateNum">驗(yàn)證碼</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
        {
          //生成隨機(jī)生成器
          Random random = new Random();
          //清空?qǐng)D片背景色
          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);
          //畫圖片的前景干擾點(diǎn)
          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);
          //保存圖片數(shù)據(jù)
          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>
      /// 得到驗(yàn)證碼圖片的長(zhǎng)度
      /// </summary>
      /// <param name="validateNumLength">驗(yàn)證碼的長(zhǎng)度</param>
      /// <returns></returns>
      public static int GetImageWidth(int validateNumLength)
      {
        return (int)(validateNumLength * 12.0);
      }
      /// <summary>
      /// 得到驗(yàn)證碼的高度
      /// </summary>
      /// <returns></returns>
      public static double GetImageHeight()
      {
        return 22.5;
      }


      //C# MVC 升級(jí)版
      /// <summary>
      /// 創(chuàng)建驗(yàn)證碼的圖片
      /// </summary>
      /// <param name="containsPage">要輸出到的page對(duì)象</param>
      /// <param name="validateNum">驗(yàn)證碼</param>
      public byte[] CreateValidateGraphic(string validateCode)
      {
        Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
        Graphics g = Graphics.FromImage(image);
        try
        {
          //生成隨機(jī)生成器
          Random random = new Random();
          //清空?qǐng)D片背景色
          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);
          //畫圖片的前景干擾點(diǎn)
          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);
          //保存圖片數(shù)據(jù)
          MemoryStream stream = new MemoryStream();
          image.Save(stream, ImageFormat.Jpeg);
          //輸出圖片流
          return stream.ToArray();
        }
        finally
        {
          g.Dispose();
          image.Dispose();
        }
      }
    }
  
}

這時(shí)需要在程序中引入兩個(gè)命名空間 System.Drawing和System.Web。

完成之后到LoginController控制器里面去新建一個(gè)ActionResult   就叫ValidateCode 用于生成驗(yàn)證碼。(這里要先對(duì)NewWeb.Common引用)

生成驗(yàn)證碼代碼如下:

 public ActionResult ValidateCode()
    {
      Common.ValidateCode validateCode = new Common.ValidateCode();
      string code = validateCode.CreateValidateCode(4); //生成的驗(yàn)證碼4個(gè)長(zhǎng)度
      Session["validateCode"] = code;
      byte[] buffer = validateCode.CreateValidateGraphic(code);//創(chuàng)建驗(yàn)證碼圖片
      return File(buffer, "image/jpeg");//返回圖片
    }

到Login視圖里面的index頁面去把img的src補(bǔ)充為:

 <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>

就可以看到頁面上面顯示出來驗(yàn)證碼

下面要做的就是點(diǎn)擊切換驗(yàn)證碼,這是通過js實(shí)現(xiàn)的代碼

 <script type="text/javascript">
    $(function () {
      
      initWin(); //初始化登錄窗體
      changeCheckCode(); //切換驗(yàn)證碼
    });
    function initWin() {
      $("#win").window({
        title: "登錄",
        width: 400,
        height: 270,
        collapsible: false,
        minimizable: false,
        maximizable: false,
        closable: false,
        modal: true,
        resizable: false,
      });
      
    }
    //切換驗(yàn)證碼
    function changeCheckCode() {
      $("#changeVcode").click(function () {
        $("#image").attr("src", $("#image").attr("src") + 1);
      });
    }
  </script>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • .Net Core自動(dòng)化部署之利用docker版jenkins部署dotnetcore應(yīng)用的方法

    .Net Core自動(dòng)化部署之利用docker版jenkins部署dotnetcore應(yīng)用的方法

    這篇文章主要給大家介紹了關(guān)于.Net Core自動(dòng)化部署之利用docker版jenkins部署dotnetcore應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • ASP.NET全棧開發(fā)教程之前后臺(tái)校驗(yàn)結(jié)合詳解

    ASP.NET全棧開發(fā)教程之前后臺(tái)校驗(yàn)結(jié)合詳解

    這篇文章主要給大家介紹了關(guān)于ASP.NET全棧開發(fā)教程之前后臺(tái)校驗(yàn)結(jié)合的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • visual studio 2019正式版安裝簡(jiǎn)單教程

    visual studio 2019正式版安裝簡(jiǎn)單教程

    這篇文章主要為大家詳細(xì)介紹了visual studio 2019正式版安裝簡(jiǎn)單教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • ASP.NET web.config中 數(shù)據(jù)庫連接字符串加密解密

    ASP.NET web.config中 數(shù)據(jù)庫連接字符串加密解密

    本文主要介紹利用aspnet_regiis.exe工具對(duì)web.config中connectionStrings節(jié)點(diǎn)進(jìn)行加密和解密的過程,希望對(duì)大家有所幫助。
    2016-05-05
  • ASP.NET MVC 微信JS-SDK認(rèn)證

    ASP.NET MVC 微信JS-SDK認(rèn)證

    這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC 微信JS-SDK認(rèn)證,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • .NET適配HarmonyOS進(jìn)展的方法

    .NET適配HarmonyOS進(jìn)展的方法

    本文介紹了.NET適配鴻蒙系統(tǒng)(HarmonyOS)的進(jìn)展,包括運(yùn)行時(shí)選擇、NativeAOT支撐、已知問題及解決辦法等,作者詳細(xì)分享了在移植Avalonia到HarmonyOS過程中遇到的問題及其解決方案,感興趣的朋友一起看看吧
    2025-03-03
  • 通過Windows Visual Studio遠(yuǎn)程調(diào)試WSL2中的.NET Core Linux應(yīng)用程序的方法

    通過Windows Visual Studio遠(yuǎn)程調(diào)試WSL2中的.NET Core Linux應(yīng)用程序的方法

    這篇文章主要介紹了通過Windows Visual Studio遠(yuǎn)程調(diào)試WSL2中的.NET Core Linux應(yīng)用程序的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • ASP.NET操作Excel備忘錄

    ASP.NET操作Excel備忘錄

    ASP.NET下操作Excel的一些技巧分析,需要的朋友可以參考下。
    2010-01-01
  • asp.net使用DataSet的ReadXml讀取XML文件及Stream流的方法

    asp.net使用DataSet的ReadXml讀取XML文件及Stream流的方法

    這篇文章主要介紹了asp.net使用DataSet的ReadXml讀取XML文件及Stream流的方法,實(shí)例分析了asp.net以字符流的形式讀取與寫入xml文件的相關(guān)技巧,需要的朋友可以參考下
    2016-06-06
  • ASP.NET Core中間件會(huì)話狀態(tài)讀寫及生命周期示例

    ASP.NET Core中間件會(huì)話狀態(tài)讀寫及生命周期示例

    這篇文章主要為大家介紹了ASP.NET Core中間件會(huì)話狀態(tài)讀寫及生命周期示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04

最新評(píng)論

类乌齐县| 河曲县| 甘谷县| 郎溪县| 莫力| 关岭| 宜良县| 禄丰县| 高州市| 韶山市| 安阳县| 灵璧县| 栾城县| 张掖市| 延津县| 凤山市| 腾冲县| 灯塔市| 建瓯市| 洛隆县| 沁源县| 博爱县| 华宁县| 宜君县| 望都县| 郧西县| 内乡县| 济宁市| 乳源| 衢州市| 万宁市| 信阳市| 固阳县| 长丰县| 九台市| 安新县| 会泽县| 绵竹市| 威远县| 亳州市| 久治县|