首頁 後端開發 C#.Net教程 asp.net如何利用ashx產生圖形驗證碼的實例

asp.net如何利用ashx產生圖形驗證碼的實例

Jul 26, 2017 pm 03:29 PM
asp.net 產生

這篇文章主要介紹了asp.net使用ashx產生圖形驗證碼的方法,結合實例形式分析了asp.net產生圖形驗證碼的步驟、實作方法與相關注意事項,需要的朋友可以參考下

本文實例講述了asp.net使用ashx產生圖形驗證碼的方法。分享給大家供大家參考,具體如下:

驗證碼的好處不用我多說,你們都懂的。我在網路上看到有人把驗證碼直接寫在aspx頁面裡,也就是說這種方式請求驗證碼等於請求一個頁面,這樣做很不科學。如下圖


<form id="form1" runat="server">
  <p>
    <asp:Image ID="Image1" runat="server" ImageUrl="Default.aspx" />
    <br />
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
  </p>
</form>
登入後複製

這個程式碼看著就覺得寫程式碼的人比較欠揍,程式碼寫成這樣子著實鬱悶。驗證嗎也不寫點script做下切換。

下面我介紹一個方式來實現這樣的功能

1. 寫個ashx產生圖形驗證碼


using System;
using System.Collections;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Web.SessionState;
using System.Drawing;
namespace usechecknum.ashx
{
  /// <summary>
  /// $codebehindclassname$ 的摘要说明
  /// </summary>
  [WebService(Namespace = "http://tempuri.org/")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  public class doCreateNum : IHttpHandler,IRequiresSessionState
  {
    public void ProcessRequest(HttpContext context)
    {
      context.Response.ContentType = "text/html";
      string checkCode = GetValidation(5); // 产生5位随机验证码字符
      context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
      System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);
      Graphics g = Graphics.FromImage(image);
      try
      {
        //生成随机生成器
        Random random = new Random();
        //清空图片背景色
        g.Clear(Color.White);
        // 画图片的背景噪音线
        int i;
        for (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 System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));
        System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);
        g.DrawString(checkCode, font, brush, 2, 2);
        //画图片的前景噪音点
        g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
        context.Response.ClearContent();
        context.Response.ContentType = "image/Gif";
        context.Response.BinaryWrite(ms.ToArray());
      }
      finally
      {
        g.Dispose();
        image.Dispose();
      }
    }
    public string GetValidation(int num)
    {
      string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //"或者写汉字也行"
      string validatecode = "";
      Random rd = new Random();
      for (int i = 0; i < num; i++)
      {
        validatecode += str.Substring(rd.Next(0, str.Length), 1);
      }
      return validatecode;
    }
    public bool IsReusable
    {
      get
      {
        return false;
      }
    }
  }
}
登入後複製

2.在頁面上顯示驗證碼,因為我們產生的是圖形,所以可以直接寫在標籤裡,我們只要寫段簡單的腳本就可以點擊滑鼠切換驗證碼了


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="usechecknum._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <title>验证码的使用</title>
</head>
<script language="javascript" type="text/javascript">
  function changeCode() {
    var imgNode = document.getElementById("vimg");
    imgNode.src = "ashx/doCreateNum.ashx?t=" + (new Date()).valueOf(); // 这里加个时间的参数是为了防止浏览器缓存的问题
  }
  </script>
<body>
  <form id="form1" runat="server">
   请输入验证码:<input type="text" name="checknum"/><img src="ashx/doCreateNum.ashx" id="vimg" onclick="changeCode()" />
  </form>
</body>
</html>
登入後複製

說了半天,該是時候看看生成的驗證碼長什麼樣子了

以上是asp.net如何利用ashx產生圖形驗證碼的實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用Python產生兩個日期之間的k個隨機日期? 如何使用Python產生兩個日期之間的k個隨機日期? Sep 09, 2023 pm 08:17 PM

產生隨機數據在數據科學領域非常重要。從建構神經網路預測、股市數據等來看,通常都會將日期當作參數之一。我們可能需要在兩個日期之間產生隨機數以進行統計分析。本文將展示如何產生兩個給定日期之間的k個隨機日期使用隨機和日期時間模組日期時間是Python內建的處理時間的庫。另一方面,隨機模組有助於產生隨機數。因此,我們可以結合隨機和日期時間模組來產生兩個日期之間的隨機日期。語法random.randint(start,end,k)這裡的random指的是Python隨機函式庫。 randint方法採用三個重要的

如何使用PHP產生可刷新的圖片驗證碼 如何使用PHP產生可刷新的圖片驗證碼 Sep 13, 2023 am 11:54 AM

如何使用PHP產生可刷新的圖片驗證碼隨著網路的發展,為了防止惡意攻擊和機器自動操作現象,許多網站都使用了驗證碼來進行使用者驗證。其中一個常見的驗證碼類型就是圖片驗證碼,透過產生一張包含隨機字元的圖片,要求使用者輸入正確的字元才能進行後續操作。本文將介紹如何使用PHP產生可刷新的圖片驗證碼,並提供具體的程式碼範例。步驟一:建立驗證碼圖片首先,我們需要建立一個用於生

如何使用PHP進行基本的自然語言生成 如何使用PHP進行基本的自然語言生成 Jun 22, 2023 am 11:05 AM

自然語言生成是一種人工智慧技術,它能夠將資料轉換為自然語言文字。在當今的大數據時代,越來越多的業務需要將資料視覺化或呈現給用戶,而自然語言生成正是一種非常有效的方法。 PHP是一種非常受歡迎的伺服器端腳本語言,它可以用來開發網頁應用程式。本文將簡要介紹如何使用PHP進行基本的自然語言生成。引入自然語言生成庫PHP自帶的函數庫並不包括自然語言生成所需的功能,因此

使用Python中的pyWaffle產生一個華夫餅圖 使用Python中的pyWaffle產生一個華夫餅圖 Aug 17, 2023 am 11:49 AM

數據視覺化對於高效的資訊理解和展示至關重要。在眾多可用的圖表類型中,華夫餅圖以方形瓦片在網格狀結構中顯示資料的新穎方式。強大的Python模組PyWaffle方便了華夫餅圖的開發,類似於許多計算和數據分析方法。在本文中,我們將看看如何使用複雜的Python模組PyWaffle創建華夫餅圖。讓我們安裝PyWafle並看看如何使用它來視覺化分類資料。在您的cmd中執行以下命令來安裝該庫,然後將其導入到您的程式碼中pipinstallpywaffleExample1的中文翻譯為:範例1在這個例子中,我們

不再擔心下班前被領導叫住開小會,AI助理幫你自動生成會議紀要 不再擔心下班前被領導叫住開小會,AI助理幫你自動生成會議紀要 Sep 04, 2023 pm 11:21 PM

訊飛聽見升級會議紀要功能,可以將口語表述直接轉換為書面稿,AI能夠根據錄音總結會議紀錄。 AI能夠幫助您完成會議紀要的撰寫工作8月31日,訊飛聽見網頁端進行了版本升級,新增了PC端即時錄音功能,能夠利用人工智慧智慧生成會議紀要。這項功能的推出將大大提高使用者在會議後整理內容、跟進重點工作事項的效率。對於經常參加會議的人來說,這個功能無疑是一個非常實用的工具,能夠節省大量時間和精力該功能的應用場景主要是PC電腦端錄音轉文字自動生成會議紀要,旨在為用戶提供最優質的服務和最先進的技術,快速提升辦公室效率的產

如何使用PHP產生帶有時間限制的二維碼? 如何使用PHP產生帶有時間限制的二維碼? Aug 26, 2023 pm 04:34 PM

如何使用PHP產生帶有時間限制的二維碼?隨著行動支付和電子門票的普及,二維碼成為了一種常見的技術。在許多場景中,我們可能需要產生一種帶有時間限制的二維碼,即使在一定時間後,該二維碼也會失效。本文將介紹如何使用PHP產生具有時間限制的二維碼,並提供程式碼範例供參考。安裝PHPQRCode函式庫要使用PHP產生二維碼,我們需要先安裝PHPQRCode函式庫。這個庫

如何產生線上答案中的錯題本 如何產生線上答案中的錯題本 Sep 25, 2023 am 10:24 AM

如何產生線上答題的錯題本在現今的資訊時代,網路答題已經成為了許多學生和教育工作者的常見任務。而錯題一直是學習過程中的難題之一,許多人都希望能夠方便地產生線上答案的錯題本,以便更好地複習和掌握知識。本文將介紹如何透過程式設計實現線上答題錯題本的生成功能,並提供具體的程式碼範例。第一步:建立網頁介面產生線上答題錯題本需要一個網頁介面來顯示題目和答案。可以使用HTML

如何使用Vue實現二維碼生成 如何使用Vue實現二維碼生成 Nov 07, 2023 am 09:57 AM

二維碼是現代社會中廣泛使用的一種資訊編碼方式,Vue是一款前端框架,如何使用Vue實現二維碼生成?一、了解二維碼產生的原理二維碼的生成原理是將一段文字或一段URL位址轉換成一張圖片,在這張圖片中編碼了文字或URL位址的資訊。二維碼產生可以使用第三方函式庫,本文介紹如何使用Qrcode.js函式庫來產生二維碼。 Qrcode.js是一款輕量、無依賴的二維碼產生函式庫。二

See all articles