QR Kodu Kontrol Toplamlarını Doğrulama ve Hata Toleransı Uygulama Nasıl Yapılır C
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.
-
NuGet Paket Yöneticisi ile https://www.nuget.org/packages/IronQR yükleyin
PM > Install-Package IronQR -
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); -
Canlı ortamınızda test etmek için dağıtın
Bugün projenizde IronQR kullanmaya başlayın ücretsiz deneme ile
Minimal İş Akışı (5 adımda)
- QR kodu kontrol toplamının doğrulanması için IronQR C# kütüphanesini indirin
QrImageInputile bir görüntü yükleyinQrReader.Readçağrısı yaparak görüntüyü çözümleyin ve Reed-Solomon doğrulamasını otomatik olarak çalıştırın- Kod çözümün başarılı olduğunu doğrulamak için sonuç toplamını kontrol edin; boş bir koleksiyon hatayı anlamına gelir
- Aşağıya gönderilmeye devam etmeden önce kod çözülen değeri uygulama gereksinimlerine karşı doğrulayın
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.
: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
Çı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.
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ğ).
Ürün Etiketi (PNG)
Kamera Çekimi (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))
Çı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.
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ü.
: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
Çı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.
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
- Hata Düzeltme Seviyeleri: yazım zamanı dayanıklılığı ve düzeltme seviyesi yapılandırması.
- QR Kodlarını Okuma Nasıl Yapılır: giriş format seçenekleri ve okuma desenleri.
- QrResult API Referansı: tüm mülk yüzeyi.
- Gelişmiş Tarama Örnekleri: tarama modu yapılandırmaları.
Üretime hazır olduğunuzda lisans seçeneklerine bakın.
Buraya tıklayarak tamamlanmış ChecksumFaultToleranceTest konsol uygulama projesini indirin.

