QR Kodu Kontrol Toplamlarını Doğrulama ve Hata Toleransı Uygulama Nasıl Yapılır C

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

Gerçek dünya girdilerini işleyen, basılı etiketler, kamera çekimleri veya taranmış belgeler dahil olmak üzere QR kod hatları, aşırı hasar görmüş semboller ve kontrol toplamından gereksinimleri geçemeyen iş adaylığını karşılayan sonuçları karşılaşacaktır.

Reed-Solomon hata düzeltme, kod çözme sırasında otomatik olarak fiziksel hasarı düzeltir. Eğer bir sembol kurtarılamazsa, sonuç koleksiyonu eksik yerine boş olur. Uygulama seviyesinde doğrulama ayrı olup, kod çözülmüş değerin boş olmadığından, beklenen formatla eşleştiğinden veya geçerli bir URI içerdiğinden emin olmayı içerir.

Bu nasıl yapılır, QR kod kontrol toplamlarını nasıl doğrulayacağınızı ve IronQR kütüphanesiyle hata toleransı kontrolleri uygulayacağınızı açıklar.

Hızlı Başlangıç: QR Kodu Kontrol Toplamlarını Doğrulama

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

  1. NuGet Paket Yöneticisi ile https://www.nuget.org/packages/IronQR yükleyin

    PM > Install-Package IronQR
  2. Bu kod parçasını kopyalayıp ç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 etmek için dağıtın

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

    arrow pointer

QR Kodu Kontrol Toplamlarını Doğrulama

Reed-Solomon hata düzeltmesi QR kodlari, kodlanan veride hasarı tespit etmek ve onarmak icin kullanır. Düzeltme seviyesi (Düşük için %7, Orta için %15, Çeyrek için %25 veya Yüksek için %30) kaybedilebilecek ve yine de geri kazanılabilecek kod kelimelerinin yüzdesini belirler.

Okuma tarafında, kontrol toplamı doğrulaması kod çözme sırasında dahili olarak çalışır. QrResult sınıfı bir güven mülkünü ifşa etmez; bir sonuç toplulasırmada varsa, kontrol toplami geçmiştir. Eğer kod çözme başarısız olursa, koleksiyon boştur.

Girdi

Orta hata düzeltme ile üretilmiş ve yolculuk sırasında muhtemelen ele alınmış veya hafifçe çizilmiş bir etiketi temsil eden, https://ironsoftware.com/ kodlaması içeren bir QR kod ürün etiketi.

https://ironsoftware.com adresini kodlayan QR kodu, garanti denetlemesi için giriş olarak kullanılır
: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/ çözülmüş değerini gösterir, bu da Reed-Solomon kod çözmenin başarılı olduğunu ve yükün eksiksiz bir şekilde geri kazanıldığını doğrular.

Terminal çıktısı, Kodlanmış QR Kodu: https://ironsoftware.com gösteriyor

Fiziksel hasara karşı daha dirençli olması için daha yüksek hata düzeltme seviyesine sahip QR kodları üretin. Yüksek seviye, daha büyük bir sembol maliyeti ile %30 veri kaybını kurtarır.


QR Kod Okumada Biçim Farkındalığını Ele Alma

IronQR, üç QR kodlama formatını destekler: standart QR, Micro QR ve Dikdörtgen Micro QR. Okuma sırasında tarayıcı formatı otomatik olarak algılar. Tarama sonrasında, QrResult.QrType alanı saptanan formatı bir enum değeri olarak sağlar.

PDF'ler için QrImageInput yerine QrPdfInput kullanın. Tarama modu, hız ve doğruluk dengesini belirler: Auto, makine öğrenimi tespitini klasik bir taramayla birleştirir, OnlyDetectionModel daha hızlı işlem için yalnızca ML modelini kullanır ve OnlyBasicScan önceden işlenmiş yüksek kalite görüntüler için ML'i tamamen atlar.

Girdi

İki yaygın giriş türü arasında format duyarlı okuma demonstrasyonu yapan bir PNG ürün etiketi (sol) ve bir JPEG kamera çekimi (sağ).

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, tespit edilen formatı, kod çözülen değeri, çözülen URI'yi 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 algılandı

QrType alanı, uygulamanın belirli bir format gerektirdiğinde kullanışlıdır. Örneğin, yalnızca standart QR kodları üreten bir depo sistemi, gürültü veya alakasız etiket gösterebilecek beklenmedik Micro QR veya Dikdörtgen Micro QR tespitlerini filtreleyebilir. Her formatın farklı kapasite özellikleri vardır: standart QR, maksimum 7.089 sayısal karakteri, Micro QR ise maksimum 35 ve Dikdörtgen Micro QR, sınırlı etiket alanı için dikdörtgen form faktörü sağlar.


QR Kod Sonuçlarına Boş Kontroller Uygulama

QrReader.Read, hiç QR kodu bulunmazsa boş bir koleksiyon döndürür; asla null döndürmez. Bununla birlikte, bireysel sonuç özelliklerinin hâlâ doğrulama gerektirir. Örneğin, Value boş olabilir ve Url, çözülmüş dize geçerli bir URI olmadığında null döner.

Güçlü bir doğrulama deseni veri başka bir sisteme geçmeden önce üç unsuru kontrol eder: koleksiyon sayısı, değer bütünlüğü ve tipi veya URI geçerliliği.

Girdi

Bazı sayfaların makine tarafından okunabilir etiket taşımadığı karışık bir toplu işteki belge sayfasını temsil eden, QR kodsuz boş bir beyaz görüntü.

Boş beyaz görüntü, null kontrol gösteriminde giriş olarak kullanılan QR kodu yok
: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, validator'ın boş-sonuç yanıtını gösterir: herhangi bir QR kodu tespit edilmedi, bu nedenle koleksiyon boş ve aşağı akış işlemine veri gönderilmez.

Terminal çıktısı Gösterim için uygun QR kodu bulunamadı.

Doğrulayıcı, çağrı yerinde null kontrolüne gerek kalmaması için boş bir liste döndürür (asla null değil). Opsiyonel expectedFormat parametresi, çağıran koda yalnızca beklenen format tipiyle eşleşen sonuçların ulaşmasını sağlayan bir format kapısı işlevi görür. Url özelliği hem URI hem de URI olmayan yükleri güvenli bir şekilde yönetmek için null-koşul operatörünü kullanır.

Asenkron iş akışları için, aynı doğrulama desenlerini ReadAsync'e uygulayın: çağrıyı bekleyin ve elde edilen koleksiyondaki aynı kontrolleri kullanın.


Daha Fazla Okuma

Üretime hazır olduğunuzda lisans seçeneklerine bakın.

Buraya tıklayarak tamamlanmış ChecksumFaultToleranceTest konsol uygulama projesini indirin.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 64,787 | Sürüm: 2026.4 just released
Still Scrolling Icon

Hala Kaydiriyor musunuz?

Hızlı bir kanit mi istiyorsunuz? PM > Install-Package IronQR
bir örneği çalıştır URL'inin bir QR koduna dönüşünü izle.