Wie man QR-Code-Prüfsummen validiert und Fehlertoleranz in C# anwendet
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.
-
Installieren Sie IronQR mit NuGet Package Manager
PM > Install-Package IronQR -
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); -
Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronQR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Minimaler Arbeitsablauf (5 Schritte)
- Laden Sie die IronQR C#-Bibliothek zur QR-Code-Prüfsummenvalidierung herunter.
- Laden Sie ein Bild mit
QrImageInput - Rufen Sie
QrReader.Readauf, um das Bild zu dekodieren und die Reed-Solomon-Validierung automatisch durchzuführen. - Überprüfen Sie die Ergebnisliste, um zu bestätigen, dass die Dekodierung erfolgreich war, da eine leere Liste einen Fehler bedeutet.
- Prüfen Sie den dekodierten Wert anhand der Anwendungsanforderungen, bevor Sie ihn weiterleiten.
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.
: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
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.
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.
Produktetikett (PNG)
Kameraaufnahme (JPEG)
: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))
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.
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.
: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
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.
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
- Fehlerkorrekturstufen : Schreibzeit-Resilienz und Konfiguration der Korrekturstufe.
- Anleitung zum Lesen von QR-Codes : Eingabeformatoptionen und Lesemuster.
- QrResult API-Referenz : vollständige Eigenschaftenoberfläche.
- Erweiterte Scanbeispiele : Scanmoduskonfigurationen.
Lizenzoptionen können Sie einsehen , sobald Sie bereit für die Produktion sind.
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.

