C#'de QR Kod Checksum'larını Nasıl Doğrular ve Hata Toleransını Uygularsınız

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

Elde edilen girdileri işleyen QR kod boru hatları, basılı etiketler, kamera çekimleri veya taranmış belgeler, decode edilemeyecek kadar zarar görmüş sembollerle ve checksums testini geçtikten sonra iş doğrulamasında kalan sonuçlarla karşılaşacaktır.

Reed-Solomon hata düzeltmesi, decode sırasında fiziksel hasarları otomatik olarak düzeltir. Bir sembol kurtarılamadığında, sonuç koleksiyonu kısmi olma yerine boştur. Uygulama seviyesindeki doğrulama ayrı bir işlemdir ve decode edilen değerin boş olmadığını, beklenen formata uyduğunu veya geçerli bir URI içerdiğini kontrol etmeyi içerir.

Bu nasıl yapılır kılavuzu, QR kodu hatalarının denetimlerini nasıl doğrulayacağınızı ve IronQR kütüphanesi ile hata toleransı denetimlerini nasıl uygulayacağınızı açıklar.

Hızlı Başlangıç: QR Kod Checksum'larını Doğrula

Bir QR kod okuyun ve çözümlemenin başarılı olup olmadığını kontrol edin: boş olmayan bir sonuç, Reed-Solomon checksums testinin geçtiği anlamına gelir.

  1. IronQR aşağıdaki NuGet Paket Yöneticisi ile yükleyin

    PM > Install-Package IronQR
  2. Bu kod parçacığını kopyalayın ve çalıştırın.

    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. Canlı ortamınızda test için dağıtım yapın

    Ücretsiz deneme ile bugün projenizde IronQR kullanmaya başlayın

    arrow pointer

QR Kod Checksum'larını Doğrulama

QR kodları, kodlanmış verinin hasarını tespit edip onarmak için Reed-Solomon hata düzeltme kullanır. Düzeltme seviyesi (Düşük %7, Orta %15, Çeyrek %25 veya Yüksek %30) kaybedilen ve hala geri kazanılabilen codewordların yüzdesini belirler.

Okuma tarafında, checksum doğrulaması çözümleme sırasında dahili olarak çalışır. QrResult sınıfı bir güven özelliği sunmaz; eğer koleksiyonda bir sonuç varsa, checksum geçmiştir. Decoding başarısız olursa, koleksiyon boştur.

Giriş

Orta düzey hata düzeltme ile oluşturulan https://ironsoftware.com/ kodlu bir QR kodu ürün etiketi, nakliye sırasında elle tutulmuş veya hafifçe çizilmiş olabilecek bir etiketi temsil eder.

Checksum doğrulama için giriş olarak kullanılan, https://ironsoftware.com'u kodlayan QR kod
: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

Çıktı

Konsol, https://ironsoftware.com/ kodunu gösterir ve bu, Reed-Solomon kod çözme işleminin başarılı olduğunu ve yükün bozulmadan kurtarıldığını teyit eder.

Terminal çıktısı, Çözülen QR Kod: https://ironsoftware.com'u gösteriyor

Fiziksel hasara karşı daha büyük bir direnç için, daha yüksek hata düzeltme seviyesine sahip QR kodları oluşturun. Yüksek seviye, daha büyük bir sembol maliyetiyle%30'luk veri kaybını geri kazanır.


Format Farkındalığını QR Kod Okuma Sürecine Dahil Etme

IronQR üç QR kodlama formatını destekler: standart QR, Micro QR ve Dikdörtgen Micro QR. Tarayıcı, okuma sırasında formatı otomatik olarak algılar. Taramadan sonra, QrResult.QrType alanı algılanan biçimi bir enum değeri olarak sağlar.

PDF'ler için QrImageInput yerine QrPdfInput kullanın. Tarama modu, hız ve doğruluk arasındaki dengeyi belirler: Auto, makine öğrenimi algılamasını klasik tarama ile birleştirir, OnlyDetectionModel daha hızlı işleme için yalnızca ML modelini kullanır ve OnlyBasicScan, yüksek kaliteli önceden işlenmiş görüntüler için ML'yi tamamen atlar.

Giriş

Format farkındalığını iki yaygın giriş türünde okuma gösteren sol PNG (ürün etiketi) ve sağ JPEG (kamera çekimi).

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

Çıktı

Konsol, dedektif formatı, çözülmüş değer, çözülmüş URI ve ürün etiketi için köşe sayısını ardından kamera çekimi için hızlı tarama sonuç sayısını gösterir.

Terminal çıktısı Format: QRCode, Değer: https://ironsoftware.com/product, URI ve Köşeler: 4 nokta tespit edildi

QrType alanı, uygulamanın belirli bir format gerektirdiği durumlarda yararlıdır. Örneğin, yalnızca standart QR kodları üreten bir depo sistemi, beklenmedik Micro QR veya Dikdörtgen Micro QR algılamalarını filtreleyebilir, bu da gürültü veya ilgisiz etiketleri gösterebilir. Her formatın kendine özgü kapasite özellikleri vardır: standart QR, 7.089 sayısal karaktere kadar destekler, Micro QR 35'e kadar ve Dikdörtgen Micro QR, sınırlı etiket alanı için dikdörtgen bir form faktörü sağlar.


QR Kod Sonuçlarına Boş Kontrolleri Uygulama

QrReader.Read, QR kodu bulunmazsa boş bir koleksiyon döndürür; asla null değerini döndürmez. Ancak, bireysel sonuç özellikleri hala doğrulama gerektirir. Örneğin, Value boş olabilir ve Url, kod çözülmüş dize geçerli bir URI değilse null değerini döndürür.

Sağlam bir doğrulama deseni, başka bir sisteme veri geçirmeden önce üç yönü kontrol eder: koleksiyon sayısı, değer bütünlüğü ve tür veya URI geçerliliği.

Giriş

Hiçbir QR kod içermeyen boş beyaz bir görüntü, bazı sayfaların makineyle okunabilir bir etiket taşımadığı bir karma toplu işlemde belge sayfasını temsil eder.

Boş beyaz görüntü, null kontrol gösterimi için giriş olarak kullanıldı.
: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

Çıktı

Konsol, doğrulayıcının boş-sonuç yanıtını gösteriyor: İşlenecek geçerli QR kod bulunamadı çünkü koleksiyon boş ve veri aşağı akış işlemine geçmiyor.

Terminal çıktısı: İşlemek için geçerli QR kod bulunamadı gösterir.

Doğrulayıcı boş bir liste döndürür (asla null değildir), böylece çağrı yerinde null kontrolü yapma gereği ortadan kalkar. İsteğe bağlı expectedFormat parametresi bir biçim geçidi görevi görür, böylece çağıran kod yalnızca beklenen biçim türüyle eşleşen sonuçları alır. Url özelliği, hem URI hem de URI olmayan yükleri güvenli bir şekilde işlemek için null koşullu operatörünü kullanır.

Asenkron iş akışları için, ReadAsync'ye aynı doğrulama kalıplarını uygulayın: çağrıyı bekleyin ve sonuç koleksiyonunda aynı kontrolleri kullanın.


Daha Fazla Okuma

Üretime hazır olduğunda lisans seçeneklerini görüntüleyin.

Tam ChecksumFaultToleranceTest konsol uygulaması projesini indirmek için buraya tıklayın.

Sıkça Sorulan Sorular

C#'de QR kod denetim toplamlarının doğrulanmasının amacı nedir?

C#'de QR kod denetim toplamlarını doğrulamak, QR kodunda kodlanmış verilerin doğru ve iletim veya tarama sırasında bozulmadığını kontrol ederek veri bütünlüğünü sağlar. IronQR, güvenilir denetim toplamı doğrulaması sağlayarak bu süreçte yardımcı olabilir.

IronQR, QR kodu biçim tespitini nasıl yönetir?

IronQR, çeşitli QR kodu formatlarını tespit etmek için güçlü yetenekler sağlayarak geniş bir QR kodu standartları ile uyumluluğu garanti eder. Bu özellik, geliştiricilerin C# uygulamalarında QR kodlarını etkili bir şekilde yönetmelerine yardımcı olur.

Reed-Solomon hata düzeltme, QR kod doğrulamasında hangi rolü oynar?

Reed-Solomon hata düzeltme, QR kodlarında tarama sırasında oluşan hataları düzeltmek için kullanılan bir yöntemdir. IronQR, bu tekniği kullanarak hata toleransını artırarak, bazı bozulma veya hasar seviyelerine rağmen QR kodlarını doğru bir şekilde okuyup doğrulayabilir.

IronQR, QR kodları ile çalışırken null güvenli desenleri uygulayabilir mi?

Evet, IronQR, null referans hatalarını önlemeye yardımcı olan null güvenli desenleri uygulayabilir. Bu, uygulamanızın QR kodlarını daha güvenilir ve verimli bir şekilde işleyebilmesini sağlar.

QR kodu işlemde hata toleransının önemi nedir?

Hata toleransı kritik önem taşır çünkü QR kodu işleme sistemlerinin hataları ve tutarsızlıkları başarısız olmadan yönetmesine izin verir. IronQR'nin hata toleransı yetenekleri, kısmen hasarlı veya gizlenmiş QR kodlarının bile doğru bir şekilde okunabilmesini sağlar.

C#'de QR kod doğrulaması için IronQR kullanmanın faydaları nelerdir?

IronQR, yüksek doğruluk, birden fazla QR kodu formatı için destek ve yerleşik hata düzeltme mekanizmaları dahil olmak üzere C#'de QR kod doğrulaması için çeşitli avantajlar sağlar ve geliştiricilerin QR kodları ile çalışması için ideal bir seçimdir.

IronQR, QR kodu okuma doğruluğunu nasıl artırır?

IronQR, QR kodlarını tespit etme ve çözme konusundaki gelişmiş algoritmaları kullanarak okuma doğruluğunu artırır ve tarama sırasında veri bozulmalarını işlemek için Reed-Solomon gibi hata düzeltme yöntemlerini uygular.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 67,270 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronQR
bir örnek çalıştırın url'nizin bir QR koda dönüşmesini izleyin.