IRONSOFTWAREHOME

如何在C#中驗證QR Code校驗和及應用容錯機制

Curtis Chau
Curtis Chau
Updated: 2026年3月6日

處理實際輸入的QR Code流程,包括印刷標籤、相機擷取或掃描文件,將遇到損壞無法解碼的符號,及通過校驗和但無法經商業驗證的結果。

里德-所羅門錯誤更正在解碼時自動處理物理損壞問題。 如果符號無法恢復,則結果集為空而非部分結果。 應用層驗證是獨立的,包括在進一步處理之前檢查解碼值是否為非空、符合期望格式或包含有效的URI。

此操作指南說明如何使用IronQR程式庫驗證QR Code校驗和及應用容錯檢查。

快速入門:驗證QR Code校驗和

讀取QR code並檢查解碼是否成功:非空結果表示里德-所羅門校驗和通過。

  1. 1Install IronQR with NuGet Package Manager

    PM > Install-Package IronQR

  2. 2複製並運行這段程式碼片段。

    using IronQr;
    using IronSoftware.Drawing;
    
    var reader = new QrReader();
    IEnumerable<QrResult> results = reader.Read(new QrImageInput("label.png"));
    
    if (!results.Any())
    {
        Console.WriteLine("No QR code detected or decoding failed.");
        return;
    }
    
    Console.WriteLine(results.First().Value);
    C#
  3. 3部署以在您的實時環境中測試

    今天就開始在您的專案中使用IronQR,透過免費試用
    arrow pointer

驗證QR Code校驗和

QR Code使用里德-所羅門錯誤更正來檢測並修復編碼資料的損壞。 更正級別(低為7%,中為15%,隔離為25%或高為30%)決定了可以失去並仍能恢復的碼字百分比。

在讀取方面,校驗和驗證在解碼時內部執行。 QrResult類別不公開信心水準屬性; 如果結果存在於集合中,則表示校驗和驗證通過。 若解碼失敗,集合為空。

輸入

中錯誤更正生成的QR Code產品標籤編碼https://ironsoftware.com/,代表一個可能在運輸中被觸摸或輕微刮傷的標籤。

QR Code編碼https://ironsoftware.com用於校驗和驗證輸入
using IronQr;
using IronSoftware.Drawing;

var reader = new QrReader();
IEnumerable<QrResult> results = reader.Read(new QrImageInput(AnyBitmap.FromFile("damaged-label.png")));

// Reed-Solomon decoding is pass/fail — presence in results means valid checksum
if (!results.Any())
{
    // Decoding failed entirely — damage exceeded the error correction capacity
    Console.WriteLine("QR code could not be decoded. Consider re-scanning or using a higher error correction level at generation time.");
    return;
}

foreach (QrResult result in results)
{
    // Decoded successfully — validate the content matches expected format
    if (string.IsNullOrWhiteSpace(result.Value))
    {
        Console.WriteLine("QR decoded but produced an empty value.");
        continue;
    }

    Console.WriteLine($"Valid QR: {result.Value}");
}
C#

輸出

終端機顯示解碼值https://ironsoftware.com/,確認里德-所羅門解碼成功且資料負載完整恢復。

終端輸出顯示解碼QR Code:https://ironsoftware.com

為了更好抵抗物理損壞,生成具有更高錯誤更正級別的QR Code。 高級別可恢復最多30%資料丟失,但符號較大。


在QR Code讀取中處理格式感知

IronQR支持三種QR編碼格式:標準QR、Micro QR和矩形Micro QR。 掃描器在讀取時自動偵測格式。 掃描後,QrResult.QrType欄位以枚舉值形式提供已偵測的格式。

對於PDFs,使用QrImageInput。 掃描模式決定了速度與準確性之間的平衡:OnlyBasicScan則完全跳過ML以獲得高品質之預處理影像。

輸入

一個是PNG產品標籤(左),另一個是JPEG相機擷取(右),展示了格式感知讀取在兩種常見輸入型別上的應用。

product-label.png QR 碼,作為格式感知讀取的輸入

產品標籤(PNG)

camera-capture.jpg JPEG QR 碼,模擬相機拍攝的畫面

相機擷取(JPEG)

using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;

// Read from an image file with ML + classic scan (default)
var reader = new QrReader();
IEnumerable<QrResult> results = reader.Read(new QrImageInput(AnyBitmap.FromFile("product-label.png")));

foreach (QrResult result in results)
{
    // Inspect the detected QR format
    Console.WriteLine($"Format: {result.QrType}");   // QRCode, MicroQRCode, or RMQRCode
    Console.WriteLine($"Value:  {result.Value}");

    // Url is non-null only if Value is a valid URI
    if (result.Url != null)
    {
        Console.WriteLine($"URI:    {result.Url.AbsoluteUri}");
    }

    // Corner coordinates for positional context
    Console.WriteLine($"Corners: {result.Points.Length} points detected");
}

// Read from a bitmap with ML-only mode for faster throughput
var bitmap = AnyBitmap.FromFile("camera-capture.jpg");
var fastResults = reader.Read(new QrImageInput(bitmap, QrScanMode.OnlyDetectionModel));
C#

輸出

終端機顯示產品標籤的檢測格式、解碼值、解析的URI及角數,接著是相機擷取的快速掃描結果數。

終端輸出顯示格式:QRCode,值:https://ironsoftware.com/product,URI,及角:檢測到4個點

QrType欄位對於應用程式需要特定格式時很有幫助。 例如,倉庫系統只產生標準QR Code,可以過濾出意外的Micro QR或矩形Micro QR偵測,這可能表示雜訊或無關的標籤。 每種格式都有不同的容量特徵:標準QR支援最多7,089個數字字元,Micro QR最多35,矩形Micro QR為有限標籤空間提供矩形形式。


將空值檢查應用於QR Code結果

QrReader.Read若未發現任何QR code,則返回空集合; 它永不返回null。 然而,單個結果屬性仍然需要進行驗證。 例如,如果解碼的字串不是有效的URI,Url將返回null。

堅固的驗證模式在將資料傳遞到其他系統之前檢查三個方面:集合計數、值的完整性和型別或URI的有效性。

輸入

一張白色空白圖像,沒有QR code,代表在混合批次文件中的一個沒有可機讀標籤的頁面。

使用沒有QR code的白色空白圖像作為空值檢查示範輸入
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using System.Collections.Generic;
using System.Linq;

public static class QrValidator
{
    public static List<QrResult> GetValidResults(
        string imagePath,
        QrEncoding? expectedFormat = null)
    {
        var reader = new QrReader();
        IEnumerable<QrResult> results = reader.Read(new QrImageInput(AnyBitmap.FromFile(imagePath)));

        // Guard: no QR codes detected
        if (!results.Any())
            return new List<QrResult>();

        return results
            .Where(r => !string.IsNullOrWhiteSpace(r.Value))
            .Where(r => expectedFormat == null || r.QrType == expectedFormat)
            .ToList();
    }
}

// Usage — only accept standard QR codes with non-empty values
var validated = QrValidator.GetValidResults(
    "shipping-manifest.png",
    expectedFormat: QrEncoding.QRCode);

if (validated.Count == 0)
{
    Console.WriteLine("No valid QR codes found for processing.");
    return;
}

foreach (var qr in validated)
{
    // Safe for downstream: value is non-empty, format is verified
    SendToInventoryApi(qr.Value, qr.Url?.AbsoluteUri);
}
C#

輸出

終端機顯示驗證器的空結果回應:未偵測到QR code,因此集合為空,無資料可進一步處理。

終端輸出顯示未找到有效的QR codes以供處理。

驗證器返回一個空列表(從不為null),消除了在呼叫處進行空值檢查的必要性。可選的expectedFormat參數作為格式門,讓呼叫程式僅接收符合期望格式型別的結果。 Url屬性使用空條件運算符安全處理URI和非URI的有效載荷。

對於非同步工作流程,將相同的驗證模式應用於ReadAsync:等待呼叫並對結果集合使用相同的檢查。


進一步閱讀

查看授權選項以便準備投入生產。

點此下載完整的ChecksumFaultToleranceTest控制臺應用專案。

常見問題

在C#中驗證QR Code校驗和的目的是什麼?

在C#中驗證QR Code校驗和確保資料完整性,通過驗證QR Code中編碼的資料是準確的且在傳輸或掃描過程中沒有被破壞。IronQR可以通過提供可靠的校驗和驗證來協助此過程。

IronQR如何處理QR Code格式檢測?

IronQR提供了強大的功能來檢測各種QR Code格式,確保與廣泛的QR Code標準相容。此功能幫助開發者在其C#應用程式中有效地處理QR Code。

Reed-Solomon錯誤校正在QR Code驗證中扮演什麼角色?

Reed-Solomon錯誤校正是一種用於QR Code的技術,用來修正掃描過程中發生的錯誤。IronQR利用此技術來增強容錯能力,使其能夠即使在某些扭曲或損壞的情況下仍能準確地讀取和驗證QR Code。

IronQR在處理QR Code時能否應用空值安全模式?

是的,IronQR可以應用空值安全模式,這有助於防止在處理QR Code資料時出現空值引用錯誤。這確保您的應用程式能更可靠地高效處理QR Code。

為什麼容錯能力在QR Code處理中很重要?

容錯能力至關重要,因為它允許QR Code處理系統在不失敗的情況下處理錯誤和不一致性。IronQR的容錯功能確保即使是部分損壞或遮擋的QR Code也能得到準確的讀取。

使用IronQR進行C#中QR Code驗證有哪些好處?

IronQR為QR Code驗證提供了多項好處,包括高精確度、對多種QR Code格式的支持以及內建的錯誤校正機制,使其成為C#開發者處理QR Code的理想選擇。

IronQR如何增強QR Code讀取的準確性?

IronQR通過利用先進的算法來檢測和解碼QR Code,以及應用Reed-Solomon等錯誤校正方法來處理掃描過程中的資料損壞,提高了讀取準確性。

What is the role of the `QrResult` class in IronQR?

The `QrResult` class in IronQR represents decoded results from QR code reading. It provides properties like the decoded value, detected QR type, and optionally, a URI if the value is a valid URL.

How does IronQR handle physical damage to QR codes?

IronQR uses Reed-Solomon error correction to automatically correct minor damages in QR codes during decoding, making it more resilient to physical damage and ensuring data integrity.

Can IronQR validate QR codes asynchronously?

Yes, IronQR supports asynchronous workflows. You can use `ReadAsync` to perform non-blocking QR code reading while applying similar validation patterns on the results.

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

準備好開始了嗎?

Nuget Downloads 74,386版本:2026.9剛剛發布

立即獲取免費的30天試用金鑰
無需信用卡或帳戶建立
C#的NuGet PDF程式庫
使用NuGet安裝

版本: 2026.9

PM > Install-Package IronQR
nuget.org/packages/IronQR/
  1. 在Solution Explorer中,右鍵點擊引用,管理NuGet包
  2. 選擇瀏覽並搜尋'IronQR'
  3. 選擇包並安裝
C# PDF DLL
下載DLL

版本: 2026.9

  1. 下載並解壓IronQR到您的Solution目錄中的如~/Libs等位置
  2. 在Visual Studio Solution Explorer,右鍵點擊引用。選擇瀏覽,選擇'IronQR.dll'

$999起的授權

有問題嗎?聯繫我們的開發團隊。

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預約您的免費現場演示
Booking Badge

受到全球數百萬工程師的信賴

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表單或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
受到全球數百萬工程師的信賴
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立