Comment valider les sommes de contrôle des codes QR et appliquer la tolérance aux défauts en C
Les pipelines de codes QR qui traitent des entrées du monde réel, notamment des étiquettes imprimées, des captures d'écran d'appareils photo ou des documents numérisés, rencontreront des symboles trop endommagés pour être décodés et des résultats qui réussissent le calcul de la somme de contrôle mais échouent à la validation métier.
La correction d'erreurs Reed-Solomon prend automatiquement en charge les dommages physiques survenant lors du décodage. Si un symbole ne peut pas être récupéré, la collection de résultats est vide plutôt que partielle. La validation au niveau de l'application est distincte et consiste à vérifier que la valeur décodée n'est pas vide, correspond au format attendu ou contient un URI valide avant tout traitement ultérieur.
Ce guide explique comment valider les sommes de contrôle des codes QR et appliquer des vérifications de tolérance aux pannes avec la bibliothèque IronQR.
Démarrage rapide : Valider les sommes de contrôle des codes QR
Lisez un code QR et vérifiez si le décodage a réussi : un résultat non vide signifie que la somme de contrôle Reed-Solomon a été validée.
-
Installez IronQR avec le Gestionnaire de Packages NuGet
PM > Install-Package IronQR -
Copiez et exécutez cet extrait de code.
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); -
Déployez pour tester sur votre environnement de production.
Commencez à utiliser IronQR dans votre projet dès aujourd'hui avec un essai gratuit
Flux de travail minimal (5 étapes)
- Téléchargez la bibliothèque IronQR C# pour valider les sommes de contrôle des codes QR
- Charger une image avec
QrImageInput - Appelez
QrReader.Readpour décoder l'image et exécuter automatiquement la validation Reed-Solomon. - Vérifiez la collection de résultats pour confirmer que le décodage a réussi ; une collection vide signifie un échec.
- Validez la valeur décodée par rapport aux exigences de l'application avant de la transmettre en aval.
Validation des sommes de contrôle des codes QR
Les codes QR utilisent la correction d'erreurs Reed-Solomon pour détecter et réparer les dommages aux données encodées. Le niveau de correction (faible à 7 %, moyen à 15 %, quartile à 25 % ou élevé à 30 %) détermine le pourcentage de mots de code qui peuvent être perdus et être récupérés.
Du côté de la lecture, la validation de la somme de contrôle s'effectue en interne lors du décodage. La classe QrResult n'expose pas de propriété confidence ; Si un résultat existe dans la collection, la somme de contrôle a réussi. Si le décodage échoue, la collection est vide.
Entrée
Une étiquette de produit avec code QR encodant https://ironsoftware.com/, générée avec une correction d'erreurs moyenne, représentant une étiquette qui a pu être manipulée ou légèrement rayée pendant le transport.
: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
Sortie
La console affiche la valeur décodée https://ironsoftware.com/, confirmant que le décodage Reed-Solomon a réussi et que la charge utile a été récupérée intacte.
Pour une meilleure résistance aux dommages physiques, générez des codes QR avec un niveau de correction d'erreur plus élevé. Le niveau élevé permet de récupérer jusqu'à 30 % de pertes de données au prix d'un symbole plus grand.
Gestion de la prise en compte du format lors de la lecture des codes QR
IronQR prend en charge trois formats d'encodage QR : QR standard, Micro QR et Micro QR rectangulaire. Le scanner détecte automatiquement le format pendant la lecture. Après l'analyse, le champ QrResult.QrType fournit le format détecté sous forme de valeur d'énumération.
Pour les fichiers PDF, utilisez QrPdfInput au lieu de QrImageInput. Le mode de numérisation détermine l'équilibre entre vitesse et précision : Auto combine la détection par apprentissage automatique avec une numérisation classique, OnlyDetectionModel utilise uniquement le modèle d'apprentissage automatique pour un traitement plus rapide, et OnlyBasicScan ignore complètement l'apprentissage automatique pour des images pré-traitées de haute qualité.
Entrée
Une étiquette de produit PNG (à gauche) et une capture d'écran JPEG (à droite), démontrant la lecture prenant en compte le format sur deux types d'entrée courants.
Étiquette du produit (PNG)
Capture d'écran (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))
Sortie
La console affiche le format détecté, la valeur décodée, l'URI résolue et le nombre de coins de l'étiquette du produit, suivis du nombre de résultats de l'analyse rapide pour la capture de la caméra.
Le champ QrType est utile lorsque l'application nécessite un format spécifique. Par exemple, un système d'entrepôt qui ne produit que des codes QR standard peut filtrer les détections inattendues de Micro QR ou de Micro QR rectangulaires, qui peuvent indiquer du bruit ou des étiquettes non pertinentes. Chaque format possède des caractéristiques de capacité distinctes : le QR standard prend en charge jusqu'à 7 089 caractères numériques, le Micro QR jusqu'à 35 et le Micro QR rectangulaire offre un format rectangulaire pour un espace d'étiquette limité.
Application de contrôles de valeurs nulles aux résultats des codes QR
QrReader.Read renvoie une collection vide si aucun code QR n'est trouvé ; Elle ne renvoie jamais null. Toutefois, les propriétés individuelles des résultats nécessitent toujours une validation. Par exemple, Value peut être vide, et Url renvoie null si la chaîne décodée n'est pas une URI valide.
Un modèle de validation robuste vérifie trois aspects : le nombre de collections, l'intégrité des valeurs et la validité du type ou de l'URI avant de transmettre les données à un autre système.
Entrée
Une image blanche vierge sans code QR, représentant une page de document dans un lot mixte où certaines pages ne comportent aucune étiquette lisible par machine.
: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
Sortie
La console affiche la réponse de validation vide : aucun code QR n'a été détecté, la collection est donc vide et aucune donnée n'est transmise au traitement ultérieur.
Le validateur renvoie une liste vide (jamais null), ce qui élimine le besoin de vérifier la présence de null au point d'appel. Le paramètre facultatif expectedFormat agit comme un filtre de format, de sorte que le code appelant ne reçoit que les résultats correspondant au type de format attendu. La propriété Url utilise l'opérateur conditionnel null pour gérer en toute sécurité les charges utiles URI et non URI.
Pour les workflows asynchrones, appliquez les mêmes modèles de validation à ReadAsync : attendez l'appel et effectuez des vérifications identiques sur la collection résultante.
Lecture supplémentaire
- Niveaux de correction d'erreurs : configuration de la résilience en temps réel et du niveau de correction.
- Comment lire les codes QR : options de format d'entrée et modèles de lecture.
- Référence de l'API QrResult : surface de propriété complète.
- Exemples de numérisation avancée : configurations du mode de numérisation.
Consultez les options de licence lorsque vous serez prêt pour la production.
Cliquez ici pour télécharger le projet complet d'application console ChecksumFaultToleranceTest.
Questions Fréquemment Posées
Quel est le but de valider les sommes de contrôle des codes QR en C# ?
La validation des sommes de contrôle des codes QR en C# garantit l'intégrité des données en vérifiant que les données encodées dans le code QR sont exactes et n'ont pas été corrompues durant la transmission ou la lecture. IronQR peut aider dans ce processus en fournissant une vérification de somme de contrôle fiable.
Comment IronQR gère-t-il la détection du format des codes QR ?
IronQR offre des capacités robustes pour détecter divers formats de codes QR, assurant la compatibilité avec un large éventail de normes de codes QR. Cette fonctionnalité aide les développeurs à gérer efficacement les codes QR dans leurs applications C#.
Quel rôle joue la correction d'erreur de Reed-Solomon dans la validation des codes QR ?
La correction d'erreur Reed-Solomon est une méthode utilisée dans les codes QR pour corriger les erreurs qui se produisent durant la lecture. IronQR utilise cette technique pour améliorer la tolérance aux pannes, lui permettant de lire et de valider avec précision les codes QR même avec un certain niveau de distorsion ou de dommage.
IronQR peut-il appliquer des modèles sans danger pour les valeurs nulles lors du travail avec des codes QR ?
Oui, IronQR peut appliquer des modèles sans danger pour les valeurs nulles, ce qui aide à prévenir les erreurs de référence nulles lors du traitement des données de code QR. Cela garantit que votre application peut traiter les codes QR de manière plus fiable et efficace.
Pourquoi la tolérance aux pannes est-elle importante dans le traitement des codes QR ?
La tolérance aux pannes est cruciale car elle permet aux systèmes de traitement des codes QR de gérer les erreurs et les écarts sans défaillir. Les capacités de tolérance aux pannes d'IronQR garantissent que même les codes QR partiellement endommagés ou obscurcis peuvent être lus avec précision.
Quels sont les avantages d'utiliser IronQR pour la validation des codes QR en C# ?
IronQR offre plusieurs avantages pour la validation des codes QR, y compris une haute précision, le support de plusieurs formats de codes QR et des mécanismes de correction des erreurs intégrés, ce qui en fait un choix idéal pour les développeurs travaillant avec des codes QR en C#.
Comment IronQR améliore-t-il la précision de la lecture de code QR ?
IronQR améliore la précision de la lecture en utilisant des algorithmes avancés pour détecter et décoder les codes QR, ainsi qu'en appliquant des méthodes de correction des erreurs comme Reed-Solomon pour gérer toute corruption de données lors de la lecture.

