IRONSOFTWAREHOME

QRコードのチェックサムを検証し、C#で耐障害性を適用する方法

Curtis Chau
Curtis Chau
Updated: 2026年3月6日

印刷されたラベル、カメラで撮影した画像、スキャンした文書など、現実世界の入力を処理するQRコード処理パイプラインでは、デコードするには損傷がひどすぎるシンボルや、チェックサムは合格するもののビジネス上の検証に失敗する結果に遭遇する可能性があります。

リード・ソロモン誤り訂正は、復号中に物理的な損傷を自動的に修復します。 シンボルを復元できない場合、結果コレクションは部分的なものではなく、空になります。 アプリケーションレベルの検証は別個のものであり、デコードされた値が空でないこと、想定される形式と一致していること、または有効なURIを含んでいることを、後続の処理の前に確認するものです。

このハウツーでは、IronQRライブラリを使用してQRコードのチェックサムを検証し、フォールトトレランスチェックを適用する方法を説明します。

クイックスタート: QRコードのチェックサムを検証する

QRコードを読み取り、デコードが成功したかどうかを確認します。結果が空でない場合は、リード・ソロモンチェックサムが合格したことを意味します。

  1. 1Install IronQR with NuGet Package Manager

    PM > Install-Package IronQR

  2. 2このコード スニペットをコピーして実行します。

    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. 3実際の環境でテストするためにデプロイする

    今日プロジェクトで IronQR を使い始めましょう無料トライアル
    arrow pointer

QRコードのチェックサムの検証

QRコードはリードソロモン誤り訂正を使用して、符号化データの損傷を検出し、修復します。 補正レベル(低:7%、中:15%、四分位:25%、高:30%)は、失われても回復可能なコードワードの割合を決定します。

読み取り側では、デコード中に内部的にチェックサム検証が実行されます。 クラスQrResultは信頼度プロパティを公開していません; 結果がコレクション内に存在する場合、チェックサムは合格です。 デコードに失敗した場合、コレクションは空になります。

入力

https://ironsoftware.com/をエンコードしたQRコード製品ラベルは、Mediumエラー訂正で生成され、輸送中に取り扱われたり軽く傷が付いたラベルを表現します。

チェックサム検証の入力として使用されるQRコードエンコード(https://ironsoftware.com)
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#

出力

コンソールはデコードされた値https://ironsoftware.com/を表示し、Reed-Solomonデコードが成功し、ペイロードが無傷で回復されたことを確認します。

デコードされたQRコードを表示するターミナル出力:https://ironsoftware.com

物理的な損傷に対する耐性を高めるには、より高いエラー訂正レベルのQRコードを生成してください。 高レベルでは、より大きなシンボルサイズを犠牲にする代わりに、最大30%のデータ損失を回復できます。


QRコード読み取りにおけるフォーマット認識の処理

IronQRは、標準QR、マイクロQR、長方形マイクロQRの3種類のQRコードエンコード形式をサポートしています。 スキャナーは読み取り時にフォーマットを自動的に検出します。 スキャン後、QrResult.QrTypeフィールドは検出されたフォーマットを列挙型の値として提供します。

PDFの場合、QrPdfInputを使用してください。 スキャンモードは速度と精度のバランスを決定します:OnlyBasicScanは事前処理された高品質画像には完全にMLをスキップします。

入力

PNG形式の製品ラベル(左)とJPEG形式のカメラ画像(右)は、2つの一般的な入力形式におけるフォーマット認識読み取りの例を示すものです。

フォーマット対応読み取りの入力として使用される product-label.png の QR コード

製品ラベル(PNG形式)

カメラ撮影をシミュレートした camera-capture.jpg JPEG の QR コード

カメラで撮影した画像(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#

出力

コンソールには、製品ラベルの検出されたフォーマット、デコードされた値、解決されたURI、コーナー数が表示され、続いてカメラキャプチャの高速スキャン結果数が表示されます。

ターミナル出力には、フォーマット: QRコード、値: https://ironsoftware.com/product、URI、コーナー: 4ポイント検出、と表示されます。

アプリケーションが特定のフォーマットを必要とする場合、QrTypeフィールドは役に立ちます。 例えば、標準的なQRコードのみを生成する倉庫システムであれば、ノイズや無関係なラベルを示している可能性のある、予期せぬマイクロQRコードや長方形マイクロQRコードの検出をフィルタリングすることができます。 各フォーマットにはそれぞれ異なる容量特性があります。標準QRコードは最大7,089文字、マイクロQRコードは最大35文字まで対応し、長方形マイクロQRコードは限られたラベルスペースに適した長方形の形状を提供します。


QRコードの結果にヌルチェックを適用する

QrReader.Readは、QRコードが見つからない場合、空のコレクションを返します; 決してnullを返しません。 しかし、個々の結果特性については、依然として検証が必要である。 例えば、Urlがnullを返します。

堅牢な検証パターンでは、データを別のシステムに渡す前に、コレクション数、値の整合性、および型またはURIの有効性という3つの側面をチェックします。

入力

QRコードのない真っ白な画像。これは、機械読み取り可能なラベルが付いていないページが混在する文書バッチの中の1ページを表しています。

ヌルチェックのデモンストレーションでは、QRコードのない空白の白い画像を入力として使用します。
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#

出力

コンソールには、バリデーターの空の結果応答が表示されます。QRコードが検出されなかったため、コレクションは空であり、データは下流の処理に進みません。

ターミナル出力に"処理可能な有効なQRコードが見つかりませんでした"と表示されます。

バリデーターは空のリストを返します(nullになることはありません)、これにより呼び出し元でのnullチェックの必要がなくなります。オプションのexpectedFormatパラメーターはフォーマットゲートとして機能し、呼び出しコードは期待されるフォーマットタイプに一致する結果のみを受け取ります。 プロパティUrlは、null条件演算子を使用してURIおよび非URIペイロードの両方を安全に処理します。

非同期ワークフローの場合、ReadAsyncに同じバリデーションパターンを適用してください:呼び出しを待機し、結果のコレクションで同じチェックを使用します。


さらなる読み物

-エラー訂正レベル:書き込み時の耐障害性と訂正レベルの設定。

生産準備が整ったら、ライセンスオプションを確認してください

ChecksumFaultToleranceTest コンソールアプリのプロジェクト全体をダウンロードするには、こちらをクリックしてください

よくある質問

C# で QR コードのチェックサムを検証する目的は何ですか?

C# で QR コードのチェックサムを検証することは、QR コードにエンコードされたデータが正確で、送信中やスキャン中に損なわれていないことを確認するために、データの整合性を保証します。IronQR は、信頼性のあるチェックサム検証を提供することで、このプロセスをサポートします。

IronQR は QR コードの形式検出をどのように行いますか?

IronQR は、多様な QR コード形式の検出能力を持ち、幅広い QR コード基準に対応します。この機能は開発者が C# アプリケーションで QR コードを効率的に処理するのに役立ちます。

Reed-Solomon エラー訂正は QR コード検証にどのような役割を果たしますか?

Reed-Solomon エラー訂正は、スキャン中に発生するエラーを訂正するために QR コードで使用される方法です。IronQR は、この技術を活用して誤差耐性を強化し、多少の歪みや損傷があっても QR コードを正確に読み取り、検証します。

IronQR は QR コード作業で null-safe パターンを適用できますか?

はい、IronQR は null-safe パターンを適用でき、QR コードデータを処理するときに null リファレンスエラーを防ぎます。これにより、アプリケーションは QR コードをより信頼性高く効率的に処理できるようになります。

QR コード処理において誤差耐性が重要なのはなぜですか?

誤差耐性は、QR コード処理システムがエラーや不一致を処理し、失敗しないようにするために重要です。IronQR の誤差耐性機能は、部分損傷や一部が覆われていても QR コードを正確に読み取れます。

C# における QR コード検証のための IronQR の使用の利点は何ですか?

IronQR は、QR コード検証のために高精度、複数の QR コード形式のサポート、組み込みのエラー訂正メカニズムなど、いくつかの利点を提供し、C# で QR コードを扱う開発者にとって理想的な選択肢となります。

IronQR は QR コードの読み取り精度をどのように向上させますか?

IronQR は、高度なアルゴリズムを使用して QR コードの検出とデコードを行い、スキャン中のデータ破損を処理するために Reed-Solomon などのエラー訂正方法を適用することで、読み取り精度を向上させます。

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
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

...
詳しく読む

準備はできましたか?

Nuget Downloads 74,386バージョン:2026.9リリースされたばかり

あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。
PDF用C# NuGetライブラリ
NuGetでインストール

バージョン: 2026.9

PM > Install-Package IronQR
nuget.org/packages/IronQR/
  1. ソリューションエクスプローラーで参照を右クリックし、NuGetパッケージを管理を選択
  2. 参照を選び、「IronQR」を検索します
  3. パッケージを選択してインストール
C# PDF DLL
DLLをダウンロード

バージョン: 2026.9

  1. IronQRをダウンロードして解凍し、ソリューションディレクトリ内の~/Libsなどの場所に保存してください
  2. Visual Studioソリューションエクスプローラーで、参照を右クリックし、「IronQR.dll」を選択します。

$999からのライセンス

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。