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 Klasse QrResult stellt keine Confidence-Eigenschaft 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 mit der Codierung https://ironsoftware.com/, generiert mit mittlerer Fehlerkorrektur, das ein Etikett darstellt, das während des Transports möglicherweise angefasst 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("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("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 decodierten Wert https://ironsoftware.com/ an, was bestätigt, dass die Reed-Solomon-Decodierung erfolgreich war und die Nutzdaten vollständig wiederhergestellt wurden.

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 Feld QrResult.QrType das erkannte Format als Enum-Wert.

Verwenden Sie für PDFs QrPdfInput anstelle von QrImageInput. Der Scan-Modus bestimmt das Gleichgewicht zwischen Geschwindigkeit und Genauigkeit: Auto kombiniert maschinelles Lernen mit einem klassischen Scan, OnlyDetectionModel verwendet nur das ML-Modell für eine schnellere Verarbeitung und OnlyBasicScan verzichtet vollständig auf ML, um vorverarbeitete Bilder in hoher Qualität zu erhalten.

Eingabe

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

product-label.png QR code used as input for format-aware reading
camera-capture.jpg JPEG QR code simulating a camera capture
: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("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("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 As AnyBitmap = 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 Feld QrType 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. Beispielsweise kann Value leer sein, und Url gibt null zurück, wenn die dekodierte Zeichenfolge keine gültige 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 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(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 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(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 qr
$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 zurück (niemals null), wodurch die Notwendigkeit einer Null-Prüfung am Aufrufort entfällt. Der optionale Parameter expectedFormat fungiert als Formatfilter, sodass der aufrufende Code nur Ergebnisse erhält, die dem erwarteten Formattyp entsprechen. Die Eigenschaft Url verwendet den Null-Bedingungsoperator, um sowohl URI- als auch Nicht-URI-Nutzdaten sicher zu verarbeiten.

Wenden Sie bei asynchronen Workflows dieselben Validierungsmuster auf ReadAsync an: Warten Sie auf den Aufruf und führen Sie identische Prüfungen an der resultierenden Sammlung durch.


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 67,270 | Version: 2026.5 just released
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.