IRONSOFTWAREHOME

Jak weryfikować sumy kontrolne kodów QR i stosować odporność na błędy w języku C#

Curtis Chau
Curtis Chau
Updated: 6 marca 2026

Potoki kodów QR, które przetwarzają dane wejściowe z rzeczywistego świata, w tym wydrukowane etykiety, zdjęcia z aparatu lub zeskanowane dokumenty, napotkają symbole, które są zbyt uszkodzone, aby je zdekodować, oraz wyniki, które przejdą kontrolę sumy kontrolnej, ale nie przejdą walidacji biznesowej.

Korekcja błędów Reed-Solomona automatycznie eliminuje fizyczne uszkodzenia podczas dekodowania. Jeśli nie można odzyskać symbolu, zbiór wyników jest pusty, a nie częściowy. Walidacja na poziomie aplikacji jest oddzielna i polega na sprawdzeniu, czy zdekodowana wartość nie jest pusta, czy odpowiada oczekiwanemu formatowi lub czy zawiera prawidłowy adres URI przed dalszym przetwarzaniem.

Ten poradnik tłumaczy, jak walidować sumy kontrolne kodów QR i stosować kontrole tolerancji błędów z użyciem biblioteki IronQR.

Szybki start: Sprawdzanie sum kontrolnych kodów QR

Odczytaj kod QR i sprawdź, czy dekodowanie się powiodło: wynik niepusty oznacza, że suma kontrolna Reeda-Solomona została zaliczona.

  1. 1Install IronQR with NuGet Package Manager

    PM > Install-Package IronQR

  2. 2Skopiuj i uruchom ten fragment kodu.

    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. 3Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronQR w swoim projekcie już dziś z darmową wersją próbną
    arrow pointer

Weryfikacja sum kontrolnych kodów QR

Kody QR wykorzystują korekcję błędów Reeda-Solomona do wykrywania i naprawy uszkodzeń zakodowanych danych. Poziom korekty (niski – 7%, średni – 15%, kwartylowy – 25% lub wysoki – 30%) określa procent kodów, które mogą zostać utracone i nadal być odzyskane.

Jeśli chodzi o odczyt, podczas dekodowania wewnętrznie przeprowadzana jest weryfikacja sumy kontrolnej. Klasa QrResult nie ujawnia właściwości pewności; jeśli wynik istnieje w zbiorze, przekazana suma kontrolna. Jeśli dekodowanie nie powiedzie się, kolekcja jest pusta.

Dane wejściowe

Etykieta produktu z kodem QR kodująca https://ironsoftware.com/, wygenerowana z korekcją średnich błędów, reprezentująca etykietę, która mogła zostać obsłużona lub lekko porysowana w trakcie transportu.

Kodowanie kodu QR https://ironsoftware.com wykorzystywane jako dane wejściowe do weryfikacji sumy kontrolnej
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#

Wynik

Konsola pokazuje zdekodowaną wartość https://ironsoftware.com/, potwierdzając, że dekodowanie Reed-Solomona zakończyło się sukcesem, a ładunek został odzyskany w całości.

Wynik działania terminala pokazujący zdekodowany kod QR: https://ironsoftware.com

Aby zapewnić większą odporność na uszkodzenia fizyczne, generuj kody QR o wyższym poziomie korekcji błędów. Poziom High odzyskuje do 30% utraconych danych kosztem większego symbolu.


Obsługa rozpoznawania formatów podczas odczytu kodów QR

IronQR obsługuje trzy formaty kodowania QR: standardowy QR, Micro QR oraz prostokątny Micro QR. Skaner automatycznie wykrywa format podczas odczytu. Po skanowaniu pole QrResult.QrType zapewnia wykryty format jako wartość typu enum.

Dla plików PDF użyj QrPdfInput zamiast QrImageInput. Tryb skanowania określa równowagę między szybkością a dokładnością: Auto łączy wykrywanie maszynowe z klasycznym skanowaniem, OnlyDetectionModel używa tylko modelu ML dla szybszego przetwarzania, a OnlyBasicScan pomija całkowicie ML dla obrazów wstępnie przetworzonych wysokiej jakości.

Dane wejściowe

Etykieta produktu w formacie PNG (po lewej) i zdjęcie w formacie JPEG (po prawej), pokazujące odczyt z uwzględnieniem formatu w przypadku dwóch popularnych typów danych wejściowych.

Kod QR product-label.png użyty jako dane wejściowe do odczytu uwzględniającego format

Etykieta produktu (PNG)

Kod QR JPEG camera-capture.jpg symulujący przechwytywanie z kamery

Zrzut ekranu z aparatu (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#

Wynik

Konsola wyświetla wykryty format, zdekodowaną wartość, rozpoznany adres URI oraz liczbę narożników dla etykiety produktu, a następnie liczbę wyników szybkiego skanowania dla obrazu z kamery.

Wynik wyświetlany w terminalu: Format: QRCode, Wartość: https://ironsoftware.com/product, URI oraz Narożniki: wykryto 4 punkty

Pole QrType jest pomocne, gdy aplikacja wymaga określonego formatu. Na przykład system magazynowy, który generuje wyłącznie standardowe kody QR, może odfiltrować nieoczekiwane wykrycia kodów Micro QR lub Rectangular Micro QR, które mogą wskazywać na zakłócenia lub niepowiązane etykiety. Każdy format ma inne właściwości pojemnościowe: standardowy kod QR obsługuje do 7089 znaków numerycznych, Micro QR do 35, a Rectangular Micro QR zapewnia prostokątny format dla ograniczonej przestrzeni na etykiecie.


Stosowanie kontroli wartości null do wyników kodów QR

QrReader.Read zwraca pustą kolekcję, jeśli nie zostaną znalezione kody QR; nigdy nie zwraca null. Jednak poszczególne właściwości wyników nadal wymagają weryfikacji. Na przykład Value może być pusty, a Url zwraca null, jeśli zdekodowany ciąg nie jest poprawnym URI.

Solidny wzorzec walidacji sprawdza trzy aspekty: liczbę elementów w zbiorze, integralność wartości oraz poprawność typu lub adresu URI przed przekazaniem danych do innego systemu.

Dane wejściowe

Puste, białe zdjęcie bez kodu QR, przedstawiające stronę dokumentu w partii mieszanej, w której niektóre strony nie posiadają etykiet nadających się do odczytu maszynowego.

Puste białe zdjęcie bez kodu QR użyte jako dane wejściowe do demonstracji sprawdzania wartości null
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#

Wynik

Konsola wyświetla odpowiedź walidatora o pustym wyniku: nie wykryto żadnych kodów QR, więc zbiór jest pusty i żadne dane nie przechodzą do dalszego przetwarzania.

Wynik wyświetlany w terminalu: Nie znaleziono żadnych prawidłowych kodów QR do przetworzenia.

Walidator zwraca pustą listę (nigdy null), eliminując potrzebę sprawdzania null na miejscu wywołania. Opcjonalny parametr expectedFormat działa jako bramka formatu, więc kod wywołujący otrzymuje tylko wyniki zgodne z oczekiwanym typem formatu. Właściwość Url używa operatora null-conditional, aby bezpiecznie obsługiwać zarówno URI, jak i ładunki niebędące URI.

Dla asynchronicznych przepływów pracy zastosuj te same wzorce walidacji do ReadAsync: oczekuj wywołania i używaj identycznych sprawdzeń na wynikowej kolekcji.


Więcej informacji

Zapoznaj się z opcjami licencyjnymi, gdy będziesz gotowy do produkcji.

Kliknij tutaj, aby pobrać kompletny projekt aplikacji konsolowej ChecksumFaultToleranceTest.

Często Zadawane Pytania

Jaki jest cel walidacji sum kontrolnych kodu QR w C#?

Walidacja sum kontrolnych kodu QR w C# zapewnia integralność danych, weryfikując, że dane zakodowane w kodzie QR są dokładne i nie zostały uszkodzone podczas transmisji lub skanowania. IronQR może wspomóc ten proces poprzez zapewnienie niezawodnej weryfikacji sum kontrolnych.

Jak IronQR obsługuje wykrywanie formatu kodu QR?

IronQR zapewnia solidne możliwości wykrywania różnych formatów kodu QR, zapewniając kompatybilność z szeroką gamą standardów kodów QR. Ta funkcja pomaga programistom efektywnie obsługiwać kody QR w ich aplikacjach C#.

Jaką rolę odgrywa korekcja błędów Reed-Solomona w walidacji kodu QR?

Korekcja błędów Reed-Solomona to metoda stosowana w kodach QR do korekcji błędów występujących podczas skanowania. IronQR wykorzystuje tę technikę do zwiększenia tolerancji na błędy, co pozwala na dokładne odczytywanie i weryfikację kodów QR nawet przy pewnym poziomie zniekształcenia lub uszkodzenia.

Czy IronQR może stosować bezpieczne dla null wzory przy pracy z kodami QR?

Tak, IronQR może stosować bezpieczne dla null wzory, które pomagają zapobiegać błędom odniesienia do null przy obsłudze danych kodu QR. To zapewnia, że twoja aplikacja może przetwarzać kody QR bardziej niezawodnie i efektywnie.

Dlaczego tolerancja na błędy jest ważna w przetwarzaniu kodu QR?

Tolerancja na błędy jest kluczowa, ponieważ pozwala systemom przetwarzania kodów QR obsługiwać błędy i niespójności bez awarii. Możliwości tolerancji na błędy IronQR zapewniają, że nawet częściowo uszkodzone lub przesłonięte kody QR mogą być dokładnie odczytane.

Jakie są korzyści z używania IronQR do walidacji kodów QR w C#?

IronQR oferuje kilka korzyści w zakresie walidacji kodów QR, w tym wysoką dokładność, obsługę wielu formatów kodów QR i wbudowane mechanizmy korekcji błędów, co czyni go idealnym wyborem dla programistów pracujących z kodami QR w C#.

W jaki sposób IronQR zwiększa dokładność odczytu kodu QR?

IronQR zwiększa dokładność odczytu, wykorzystując zaawansowane algorytmy do wykrywania i dekodowania kodów QR oraz stosując metody korekcji błędów, takie jak Reed-Solomon, do obsługi dowolnej korupcji danych podczas skanowania.

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
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Gotowy, aby rozpocząć?

Nuget Downloads 74,386Wersja:2026.9właśnie wydany

Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta
Biblioteka C# NuGet dla plików PDF
Zainstaluj za pomocą NuGet

Wersja: 2026.9

PM > Install-Package IronQR
nuget.org/packages/IronQR/
  1. W Eksploratorze Rozwiązań, kliknij prawym przyciskiem Myszy na Odwołania, Zarządzaj pakietami NuGet
  2. Wybierz Przeglądaj i wyszukaj "IronQR"
  3. Wybierz pakiet i zainstaluj
DLL PDF dla C#
Pobierz DLL

Wersja: 2026.9

  1. Pobierz i rozpakuj IronQR do lokalizacji, takiej jak ~/Libs w katalogu Solution
  2. W Eksploratorze rozwiązań Visual Studio kliknij prawym przyciskiem myszy Odwołania. Wybierz Przeglądaj, "IronQR.dll"

Licencje od $999

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta