Wie man QR-Code-Prüfsummen validiert und Fehlertoleranz in C# anwendet

This article was translated from English: Does it need improvement?
Translated
View the article in English

Bei der Verarbeitung von QR-Code-Pipelines, die reale Eingaben wie gedruckte Etiketten, Kameraaufnahmen oder gescannte Dokumente verarbeiten, stoßen wir auf Symbole, die zu beschädigt sind, um dekodiert zu werden, und auf Ergebnisse, die zwar die Prüfsumme bestehen, aber die geschäftliche Validierung nicht bestehen.

Die Reed-Solomon-Fehlerkorrektur behebt automatisch physikalische Schäden während der Dekodierung. Kann ein Symbol nicht wiederhergestellt werden, ist die Ergebnismenge leer und nicht nur teilweise. Die Validierung auf Anwendungsebene ist separat und beinhaltet die Prüfung, ob der dekodierte Wert nicht leer ist, dem erwarteten Format entspricht oder eine gültige URI enthält, bevor er weiterverarbeitet wird.

Dieser Leitfaden erklärt, wie man QR-Code-Prüfsummen validiert und Fehlerüberprüfungsvorgänge mit der IronQR-Bibliothek durchführt.

Schnellstart: QR-Code-Prüfsummen validieren

Lesen Sie einen QR-Code und prüfen Sie, ob die Dekodierung erfolgreich war: Ein nicht leeres Ergebnis bedeutet, dass die Reed-Solomon-Prüfsumme bestanden wurde.

  1. Installieren Sie IronQR mit NuGet Package Manager

    PM > Install-Package IronQR
  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    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);
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronQR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer

Validierung von QR-Code-Prüfsummen

QR-Codes verwenden die Reed-Solomon-Fehlerkorrektur, um Schäden an den codierten Daten zu erkennen und zu beheben. Der Korrekturgrad (Niedrig bei 7 %, Mittel bei 15 %, Quartil bei 25 % oder Hoch bei 30 %) bestimmt den Prozentsatz der Codewörter, die verloren gehen und dennoch wiederhergestellt werden können.

Auf der Leseseite erfolgt die Prüfsummenvalidierung intern während der Dekodierung. Die QrResult-Klasse stellt keine Eigenschaft für das Vertrauen bereit; Wenn in der Sammlung ein Ergebnis vorhanden ist, wurde die Prüfsumme erfolgreich berechnet. Schlägt die Dekodierung fehl, ist die Sammlung leer.

Eingabe

Ein QR-Code-Produktetikett kodiert https://ironsoftware.com/, erzeugt mit mittlerer Fehlerkorrektur und repräsentiert ein Etikett, das möglicherweise im Transport behandelt oder leicht zerkratzt wurde.

QR-Code-Codierung (https://ironsoftware.com) als Eingabe für die Prüfsummenvalidierung verwendet
:path=/static-assets/qr/content-code-examples/how-to/checksum-and-fault-tolerance/checksum-validation.cs
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}");
}
Imports IronQr
Imports IronSoftware.Drawing

Dim reader As New QrReader()
Dim results As IEnumerable(Of QrResult) = reader.Read(New QrImageInput(AnyBitmap.FromFile("damaged-label.png")))

' Reed-Solomon decoding is pass/fail — presence in results means valid checksum
If Not results.Any() Then
    ' 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
End If

For Each result As QrResult In results
    ' Decoded successfully — validate the content matches expected format
    If String.IsNullOrWhiteSpace(result.Value) Then
        Console.WriteLine("QR decoded but produced an empty value.")
        Continue For
    End If

    Console.WriteLine($"Valid QR: {result.Value}")
Next
$vbLabelText   $csharpLabel

Ausgabe

Die Konsole zeigt den dekodierten Wert https://ironsoftware.com/ an, was bestätigt, dass die Reed-Solomon-Dekodierung erfolgreich war und die Nutzlast intakt wiederhergestellt wurde.

Terminalausgabe mit dem dekodierten QR-Code: https://ironsoftware.com

Um eine höhere Widerstandsfähigkeit gegenüber physischen Beschädigungen zu erzielen, sollten QR-Codes mit einem höheren Fehlerkorrekturniveau generiert werden. Die hohe Auflösung gleicht Datenverluste von bis zu 30 % aus, erfordert jedoch ein größeres Symbol.


Umgang mit Formatbewusstsein beim Lesen von QR-Codes

IronQR unterstützt drei QR-Codierungsformate: Standard-QR, Micro-QR und Rechteckiger Micro-QR. Der Scanner erkennt das Format automatisch während des Lesevorgangs. Nach dem Scannen liefert das QrResult.QrType-Feld das erkannte Format als einen Enum-Wert.

Für PDFs verwenden Sie QrPdfInput anstelle von QrImageInput. Der Scanmodus bestimmt das Gleichgewicht zwischen Geschwindigkeit und Genauigkeit: Auto kombiniert maschinelles Lernen zur Erkennung mit einem klassischen Scan, OnlyDetectionModel verwendet nur das ML-Modell für eine schnellere Verarbeitung und OnlyBasicScan überspringt ML vollständig für hochwertige vorverarbeitete Bilder.

Eingabe

Ein PNG-Produktetikett (links) und eine JPEG-Kameraaufnahme (rechts) demonstrieren das formatbewusste Lesen zweier gängiger Eingabetypen.

product-label.png QR-Code, der als Eingabe für formatbewusstes Lesen verwendet wird
camera-capture.jpg JPEG-QR-Code, der eine Kameraaufnahme simuliert
:path=/static-assets/qr/content-code-examples/how-to/checksum-and-fault-tolerance/format-awareness.cs
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));
Imports IronQr
Imports IronSoftware.Drawing
Imports IronQr.Enum

' Read from an image file with ML + classic scan (default)
Dim reader As New QrReader()
Dim results As IEnumerable(Of QrResult) = reader.Read(New QrImageInput(AnyBitmap.FromFile("product-label.png")))

For Each result As QrResult 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 IsNot Nothing Then
        Console.WriteLine($"URI:    {result.Url.AbsoluteUri}")
    End If

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

' Read from a bitmap with ML-only mode for faster throughput
Dim bitmap = AnyBitmap.FromFile("camera-capture.jpg")
Dim fastResults = reader.Read(New QrImageInput(bitmap, QrScanMode.OnlyDetectionModel))
$vbLabelText   $csharpLabel

Ausgabe

Die Konsole zeigt das erkannte Format, den dekodierten Wert, die aufgelöste URI und die Eckpunktzahl für das Produktetikett an, gefolgt von der Anzahl der Schnellscan-Ergebnisse für die Kameraaufnahme.

Terminalausgabe mit folgenden Angaben: Format: QR-Code, Wert: https://ironsoftware.com/product, URI, Ecken: 4 erkannt

Das QrType-Feld ist hilfreich, wenn die Anwendung ein bestimmtes Format erfordert. Ein Lagersystem, das beispielsweise nur Standard-QR-Codes erzeugt, kann unerwartete Micro-QR- oder Rectangular-Micro-QR-Erkennungen herausfiltern, die auf Störungen oder nicht zugehörige Etiketten hinweisen könnten. Jedes Format hat unterschiedliche Kapazitätseigenschaften: Standard-QR unterstützt bis zu 7.089 numerische Zeichen, Micro-QR bis zu 35, und Rectangular Micro QR bietet einen rechteckigen Formfaktor für begrenzten Etikettenplatz.


Anwenden von Nullprüfungen auf QR-Code-Ergebnisse

QrReader.Read gibt eine leere Sammlung zurück, wenn keine QR-Codes gefunden werden; es gibt niemals null zurück. Die einzelnen Ergebniseigenschaften bedürfen jedoch noch der Validierung. Zum Beispiel kann Value leer sein, und Url gibt null zurück, wenn der dekodierte String kein gültiger URI ist.

Ein robustes Validierungsmuster prüft drei Aspekte: die Anzahl der Datensätze, die Integrität der Werte und die Gültigkeit des Datentyps oder der URI, bevor die Daten an ein anderes System weitergegeben werden.

Eingabe

Ein leeres weißes Bild ohne QR-Code, das eine Dokumentenseite in einem gemischten Stapel darstellt, bei dem einige Seiten keine maschinenlesbare Kennzeichnung tragen.

Ein leeres weißes Bild ohne QR-Code wird als Eingabe für eine Nullprüfungsdemonstration verwendet.
:path=/static-assets/qr/content-code-examples/how-to/checksum-and-fault-tolerance/null-checking-validator.cs
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);
}
Imports IronQr
Imports IronQr.Enum
Imports IronSoftware.Drawing
Imports System.Collections.Generic
Imports System.Linq

Public Module QrValidator
    Public Function GetValidResults(
        imagePath As String,
        Optional expectedFormat As QrEncoding? = Nothing) As List(Of QrResult)

        Dim reader As New QrReader()
        Dim results As IEnumerable(Of QrResult) = reader.Read(New QrImageInput(AnyBitmap.FromFile(imagePath)))

        ' Guard: no QR codes detected
        If Not results.Any() Then
            Return New List(Of QrResult)()
        End If

        Return results _
            .Where(Function(r) Not String.IsNullOrWhiteSpace(r.Value)) _
            .Where(Function(r) expectedFormat Is Nothing OrElse r.QrType = expectedFormat) _
            .ToList()
    End Function
End Module

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

If validated.Count = 0 Then
    Console.WriteLine("No valid QR codes found for processing.")
    Return
End If

For Each qr In validated
    ' Safe for downstream: value is non-empty, format is verified
    SendToInventoryApi(qr.Value, qr.Url?.AbsoluteUri)
Next
$vbLabelText   $csharpLabel

Ausgabe

In der Konsole wird die leere Ergebnisantwort des Validators angezeigt: Es wurden keine QR-Codes erkannt, daher ist die Sammlung leer und es werden keine Daten zur Weiterverarbeitung weitergeleitet.

Terminalausgabe mit der Meldung: Es wurden keine gültigen QR-Codes zur Verarbeitung gefunden.

Der Validator gibt eine leere Liste (niemals null) zurück, was die Notwendigkeit einer Null-Prüfung an der Aufrufstelle eliminiert. Der optionale expectedFormat-Parameter fungiert als Format-Gate, sodass der aufgerufene Code nur Ergebnisse erhält, die dem erwarteten Format-Typ entsprechen. Die Url-Eigenschaft verwendet den null-bedingten Operator, um sowohl URI- als auch Nicht-URI-Nutzlasten sicher zu verarbeiten.

Für asynchrone Workflows wenden Sie die gleichen Validierungsmuster auf ReadAsync an: warten Sie den Aufruf ab und verwenden Sie identische Überprüfungen für die resultierende Sammlung.


Weiterführende Literatur

Lizenzoptionen können Sie einsehen , sobald Sie bereit für die Produktion sind.

Klicken Sie hier, um das vollständige Konsolenanwendungsprojekt ChecksumFaultToleranceTest herunterzuladen .

Häufig gestellte Fragen

Was ist der Zweck der Validierung von QR-Code-Prüfsummen in C#?

Die Validierung von QR-Code-Prüfsummen in C# stellt die Datenintegrität sicher, indem überprüft wird, dass die im QR-Code codierten Daten korrekt sind und während der Übertragung oder des Scanns nicht beschädigt wurden. IronQR kann diesen Prozess unterstützen, indem es zuverlässige Prüfsummen-Verifikation bereitstellt.

Wie erkennt IronQR QR-Code-Formate?

IronQR bietet robuste Fähigkeiten zur Erkennung verschiedener QR-Code-Formate und stellt die Kompatibilität mit einer Vielzahl von QR-Code-Standards sicher. Diese Funktion hilft Entwicklern, QR-Codes effizient in ihren C#-Anwendungen zu verarbeiten.

Welche Rolle spielt die Reed-Solomon-Fehlerkorrektur bei der QR-Code-Validierung?

Die Reed-Solomon-Fehlerkorrektur ist eine Methode, die in QR-Codes verwendet wird, um während des Scannens auftretende Fehler zu korrigieren. IronQR nutzt diese Technik, um die Fehlertoleranz zu verbessern und ermöglicht es so, QR-Codes selbst bei Verformungen oder Beschädigungen genau zu lesen und zu validieren.

Kann IronQR nullsichere Muster anwenden, wenn es mit QR-Codes arbeitet?

Ja, IronQR kann nullsichere Muster anwenden, was hilft, Nullreferenzfehler bei der Verarbeitung von QR-Code-Daten zu verhindern. Dies stellt sicher, dass Ihre Anwendung QR-Codes zuverlässiger und effizienter verarbeiten kann.

Warum ist Fehlertoleranz bei der QR-Code-Verarbeitung wichtig?

Fehlertoleranz ist entscheidend, da sie es QR-Code-Verarbeitungssystemen ermöglicht, Fehler und Abweichungen zu handhaben, ohne zu versagen. Die Fehlertoleranzfähigkeiten von IronQR stellen sicher, dass selbst teilweise beschädigte oder verdeckte QR-Codes genau gelesen werden können.

Welche Vorteile bietet die Verwendung von IronQR zur QR-Code-Validierung in C#?

IronQR bietet mehrere Vorteile für die QR-Code-Validierung, einschließlich hoher Genauigkeit, Unterstützung für mehrere QR-Code-Formate und integrierte Fehlerkorrekturmechanismen, die es zu einer idealen Wahl für Entwickler machen, die mit QR-Codes in C# arbeiten.

Wie verbessert IronQR die QR-Code-Lesegenauigkeit?

IronQR verbessert die Lesegenauigkeit, indem es fortschrittliche Algorithmen zur Erkennung und Dekodierung von QR-Codes verwendet sowie Fehlerkorrekturmethoden wie Reed-Solomon anwendet, um Datenbeschädigungen während des Scannens zu bewältigen.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 70,398 | Version: 2026.7 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronQR
Führen Sie ein Beispiel aus und beobachten Sie, wie Ihre URL zu einem QR-Code wird.