39 バーコードとは何ですか? 用途、構造&世代ガイド
この包括的なガイドは、コード39のバーコッドについて知っておくべきすべてをカバーし、その構造と暗号化から実用的な実施と問題解決に至るまで。
39 バーコードとは?
Code 39, also known as Code 3 of 9 or USD-3, is a variable-length alfanumeric barcode symbology that can encode uppercase letters (A-Z), digits (0-9), and several special characters including space, hyphen (-), period (.), dollar sign ($), forward slash (/), plus sign (+) and percentage (%). 「コード39」という名前は、元々39文字を暗号化したという事実から来ていますが、現代の実装は追加の字符をサポートしています。
他のいくつかのバーコード形式とは異なり、Code 39 は自己チェックであり、義務的なチェック番号を必要としませんので、実装およびデコーディングが比較的簡単です。
歴史と背景
コード39は1974年にデイヴィッド・アルライスとレイ・スティーブンズによって開発され、インターメック・コーポレーションで強力で実施しやすいバーコーディングシステムであり、数値とアルファベットの両方のデータを処理することができ、シンボロジーはそのシンプルさと信頼性のために迅速に採用されており、1980年代初頭から業界標準となりました。
フォーマットはANSI MH10.8M-1983 と、その後ISO/IEC 16388 と標準化されました。その広範な採用は、米国国防省が1980年代に標準バーコード形式として採用し、軍事物流および供給チェーン管理における使用につながったときにさらに加速しました。
コード 39 vs. カウント 128
Code 39 と Code 128 は人気のある線形バーコード形式ですが、それらはさまざまなアプリケーションに適している特徴があります。
コード39 優位性:
- シンプルな暗号化システム
- 強制チェックなしの自己チェック
- 実装・デビューが容易
- 印刷不完全性により誤解耐性
- アルファノミリックキャラクターを先住民としてサポート
コード 128 利点:
- より高いデータ密度(よりコンパクト)
- ASCII キャラクターセットをサポート
- データ圧縮の改善
- 正確性を向上させるための必須チェックデジット
- 単なる数値データの効率化
コード39を選択するとき:
- 相続システムの互換性が必要
- 単純なアルファナンリックデータ暗号化
- 印刷品質の可能性のある環境
- 簡単な手動検証を必要とするアプリケーション
コード128を選択するとき:
- スペース制限(コンパクトバーコードが必要)
- 高容量スキャンアプリケーション
- 特別な文字や下の文字を暗号化する必要があります。
- 最大データの完全性は重要です。
第39条 コードの一般使用
コード39の多様性と信頼性は、多くの業界やアプリケーションで標準的な選択肢となっています。
Inventory and Asset Tracking 資産追跡
コード39は、数字と文字の両方を暗号化する能力のため、倉庫管理システムで広く使用されており、部分数、SKU、および資産タグに最適です。
- Work-in-process tracking:セットラインを通じて製品を追跡する
- Raw材料識別:入力コンポーネントおよび供給物のラベル化
- 完成商品の収納:倉庫レベルの管理
- 設備資産タグ:トラッキングツール、機械、オフィス機器
- 位置識別:倉庫のブランド、シールド、および保管領域をマークする
小売環境は、コード39の読みやすさとエラー寛容性から利益を得る、特にバーコーディングラベルが損傷または部分的な損害を経験する状況では。
医療・IDカード
医療業界は、さまざまな識別および追跡目的のためにコード39を採択しました。
- 患者の識別:ラストバンドと医療記録
- 医薬品の追跡:薬物の記録と処方薬の管理
- 実験室のサンプル:サンボル識別および保護チェーン
- 医療機器:携帯デバイスおよびツールの追跡
- スタッフ識別:従業員の標識とアクセスカード
コード39のアルファナンマリックデータを暗号化する能力は、患者ID番号、従業員コド、および文字と数字を組み合わせる薬物ロット番号に特に役立ちます。
コード39 構造と暗号化
コード39の構造を理解することは、適切な実施とトラブル解決に不可欠です バーコッドは、スタートと停止の文字、データ文字およびオプションチェック文字で構成されています。
基本構造
各コード39のバーコッドは、以下のパターンに従います。
- スタートキャラクター(スターリック)
- データキャラクター(実際の暗号化された情報)
- オプションチェックキャラクター(モジュール43計算)
- ステップキャラクター(スターリック)
それぞれのキャラクターは、9つの要素(バーとスペース)のユニークなパターンによって表現され、その3つが広く、6つは狭い。
サポートキャラクター
コード39は標準実装で合計44文字をサポートしています。
数値: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9上記の文字: A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、T、U、V、W、X、Y、Z特別キャラクター: スペース、 -、 $、 /、 +、 %コントロール キャラクター: * (スタート/ストップ)
拡張コード39は、標準文字の組み合わせを使用して設定された完全なASCII文字を暗号化することができますが、これには専門化と解読論理が必要です。
キャラクターコードパターン
各キャラクターには独特の9要素パターンがあります。
- 0:NNNWWNWNN(N=ナロウ、W=ワイド)
- A:WNWNNNNW
- 1: WNNNWNNW
- *****:NWNNWN(スタート/ストップ)
パターンはバー(ブラック)とスペース(ホワイト)の間で切り替え、バーから始まります。
モジュール 43 キャラクターチェック
コード39はチェック番号を必要としないが、その実装によりデータの完全性が大幅に向上する。
- 各キャラクターに数値を割り当てる(0-42)
- すべての性格値をデータにまとめる
- 残り数を計算すると、43分に分けられます。
- 残りのコードを39文字に変換する
このオプションのチェックキャラクターは、データとストップの間に置かれ、スキャン中にエラー検出の追加層を提供します。
39 バーコードを生成する方法
39 バーコードの生成は、オンラインツールからプログラミング実装に至るまで、さまざまな方法で実現することができます。
オンラインジェネレーター
いくつかのオンラインプラットフォームは、無料のコード39バーコッドの生産を提供しています。
- 利点:ソフトウェアのインストールは必要ありません、単一生成のための迅速
- 制限:バッチ処理に適していません、カスタマイズオプションが限られています。
- 使用例:プロトタイプ、小規模プロジェクト、教育目的
オンラインジェネレーターを使用する際には、適切なコード39の仕様をサポートしていることを確認し、正しいスタート/ストップ文字やオプションチェック数字計算を含む。
Aspose.BarCode を使用して .NET で実装する
プログラミングバーコードの生成を必要とするプロフェッショナルアプリケーションでは、Aspose.BarCode for .NET は、幅広いカスタマイズオプションを備えた包括的な Code 39 サポートを提供します。
基本コード 39世代
using Aspose.BarCode;
using Aspose.BarCode.Generation;
// Create a BarcodeGenerator instance for Code 39
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.Code39Standard, "HELLO123");
// Set barcode image properties
generator.Parameters.Barcode.XDimension.Millimeters = 0.5f;
generator.Parameters.Barcode.BarHeight.Millimeters = 15;
// Generate and save the barcode
generator.Save("code39_basic.png", BarCodeImageFormat.Png);
進化コード 39 設定
using Aspose.BarCode;
using Aspose.BarCode.Generation;
// Create generator with specific encoding
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.Code39Standard, "PRODUCT-001");
// Configure Code 39 specific parameters
generator.Parameters.Barcode.Code39.ChecksumMode = Code39ChecksumMode.Mod43;
generator.Parameters.Barcode.Code39.IsCheckSumEnabled = true;
// Set dimensions and appearance
generator.Parameters.Barcode.XDimension.Millimeters = 0.4f;
generator.Parameters.Barcode.BarHeight.Millimeters = 12;
generator.Parameters.Resolution = 300; // DPI for high-quality printing
// Configure text display
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
generator.Parameters.Barcode.CodeTextParameters.Font.Size.Point = 10;
// Set margins for better integration
generator.Parameters.CaptionAbove.Text = "Product Code";
generator.Parameters.CaptionAbove.Visible = true;
// Generate high-resolution barcode
generator.Save("code39_advanced.png", BarCodeImageFormat.Png);
バッチ・ジェネレーション エラー処理
using Aspose.BarCode;
using Aspose.BarCode.Generation;
using System;
using System.Collections.Generic;
public class Code39BatchGenerator
{
public void GenerateBarcodes(List<string> productCodes, string outputPath)
{
foreach (string code in productCodes)
{
try
{
// Validate input data
if (string.IsNullOrEmpty(code) || !IsValidCode39Data(code))
{
Console.WriteLine($"Skipping invalid code: {code}");
continue;
}
// Create generator
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.Code39Standard, code);
// Configure for production use
generator.Parameters.Barcode.Code39.IsCheckSumEnabled = true;
generator.Parameters.Barcode.XDimension.Millimeters = 0.33f;
generator.Parameters.Barcode.BarHeight.Millimeters = 10;
generator.Parameters.Resolution = 300;
// Save with descriptive filename
string filename = $"{outputPath}/barcode_{code.Replace(" ", "_")}.png";
generator.Save(filename, BarCodeImageFormat.Png);
Console.WriteLine($"Generated barcode for: {code}");
}
catch (Exception ex)
{
Console.WriteLine($"Error generating barcode for {code}: {ex.Message}");
}
}
}
private bool IsValidCode39Data(string data)
{
// Check for valid Code 39 characters
string validChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";
return data.ToUpper().All(c => validChars.Contains(c));
}
}
拡張コード 39 実施
using Aspose.BarCode;
using Aspose.BarCode.Generation;
// Generate Extended Code 39 for full ASCII support
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.Code39Extended, "Hello World!");
// Extended Code 39 automatically handles lowercase and special characters
generator.Parameters.Barcode.XDimension.Millimeters = 0.5f;
generator.Parameters.Barcode.BarHeight.Millimeters = 15;
generator.Save("code39_extended.png", BarCodeImageFormat.Png);
39 バーコードをスキャンする方法
スキャンコード39のバーコーディングには、シンボロジーを正確に解読できる適切なハードウェアおよびソリューションが必要です。
互換性のあるスキャナー
コード39は、広範囲に採用されているため、ほぼすべての商業バーコッドスキャナーによってサポートされています。
ハンドル・レーザー・スキャナー:
- 損傷または低品質のバーコードに対して最も信頼性の高い
- さまざまな照明条件でうまく働く
- 小売・倉庫環境に適しています。
CCD/LED スキャナー:
- コスト効率近距離スキャン
- POSアプリケーションに適しています。
- バーコード表面に近づく必要があります。
2D画像:
- 1Dと2Dのバーコードを読み取ることができます。
- 損傷したバーコードでより良いパフォーマンス
- 画像撮影および処理のサポート
スキャナー設定
ほとんどの現代のスキャナーは自動的にコード39バーコドを検出しますが、手動の設定が必要になる可能性があります:
- デジタル検証チェック
- 拡張コード39サポート
- 最低/最大バーコード長さ
- スタート/停止 キャラクター転送
モバイル・デスクトップソリューション
モバイルスキャン Aspose.BarCode
using Aspose.BarCode.BarCodeRecognition;
using System;
public class Code39Scanner
{
public string ScanCode39Barcode(string imagePath)
{
try
{
// Create BarCodeReader for Code 39
using (BarCodeReader reader = new BarCodeReader(imagePath, DecodeType.Code39Standard))
{
// Configure recognition settings
reader.QualitySettings = QualitySettings.HighPerformance;
// Scan for barcodes
foreach (BarCodeResult result in reader.ReadBarCodes())
{
Console.WriteLine($"Code 39 Detected: {result.CodeText}");
Console.WriteLine($"Code Type: {result.CodeType}");
return result.CodeText;
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error scanning barcode: {ex.Message}");
}
return null;
}
}
複数のフォーマットで高度な認識
using Aspose.BarCode.BarCodeRecognition;
using System;
using System.Drawing;
public class MultiFormatScanner
{
public void ScanMultipleCode39Types(string imagePath)
{
// Support both standard and extended Code 39
DecodeType[] code39Types = { DecodeType.Code39Standard, DecodeType.Code39Extended };
using (BarCodeReader reader = new BarCodeReader(imagePath, code39Types))
{
// Configure for better accuracy
reader.QualitySettings.AllowMedianSmoothing = true;
reader.QualitySettings.MedianSmoothingWindowSize = 5;
foreach (BarCodeResult result in reader.ReadBarCodes())
{
Console.WriteLine($"Barcode Text: {result.CodeText}");
Console.WriteLine($"Format: {result.CodeType}");
Console.WriteLine($"Region: {result.Region}");
// Verify check digit if present
if (result.Extended.Code39 != null)
{
Console.WriteLine($"Check Sum: {result.Extended.Code39.CheckSum}");
}
}
}
}
}
トラブル解決と最良の実践
成功したコード39の実施には、印刷品質、スキャン条件、データ認証に注意を払う必要があります。
印刷品質とサイズ
最低限の要求事項:
- Xサイズ(狭いバー幅):最低 0.191mm、推奨 0.33mm
- バーの高さ:最低5mmまたは15%のバーコードの長さ、どちらが大きいか
- 静かなゾーン:両側で最低10X(X = 狭いバー幅)
印刷品質の要因:
- 高解像度プリンター(生産用最低300 DPI)
- ・一貫したバーエイジ定義を維持する
- バーと背景の間の適切な対比を確保する
- スキャンを妨げる可能性のある反射または輝く材料を避ける
品質管理チェックリスト:
using Aspose.BarCode.Generation;
public class BarcodeQualityChecker
{
public bool ValidateBarcodeQuality(BarcodeGenerator generator)
{
// Check X-dimension
if (generator.Parameters.Barcode.XDimension.Millimeters < 0.191f)
{
Console.WriteLine("Warning: X-dimension below minimum specification");
return false;
}
// Verify bar height
float minHeight = Math.Max(5.0f, generator.Parameters.Barcode.XDimension.Millimeters * 15);
if (generator.Parameters.Barcode.BarHeight.Millimeters < minHeight)
{
Console.WriteLine("Warning: Bar height insufficient");
return false;
}
// Check resolution for print quality
if (generator.Parameters.Resolution < 300)
{
Console.WriteLine("Warning: Resolution may be insufficient for professional printing");
}
return true;
}
}
ミスを最小限にする
●データ認証:
- 暗号化前にキャラクターセットの互換性を確認する
- 重要なアプリケーションのためのチェックデジット計算の実施
- バーコードコンテンツの長さとフォーマットを確認する
●環境観点:
- 適切な照明をスキャンする
- バーコードを物理的損傷から保護する
- 適切なラベル材料をアプリケーション環境に使用する
スキャナーの最適化:
- 定期的なスキャナーカリブレーションとメンテナンス
- スキャン技術に関する適切なオペレータートレーニング
- エラー処理とリトリー論理の実施
一般エラー予防:
public class Code39ErrorPrevention
{
public bool ValidateAndEncode(string data)
{
// Remove invalid characters
string cleanData = CleanCode39Data(data);
// Check length limits
if (cleanData.Length > 50) // Practical limit for most applications
{
Console.WriteLine("Warning: Data length may cause scanning issues");
}
// Generate with error checking
try
{
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.Code39Standard, cleanData);
generator.Parameters.Barcode.Code39.IsCheckSumEnabled = true;
return true;
}
catch (Exception ex)
{
Console.WriteLine($"Encoding error: {ex.Message}");
return false;
}
}
private string CleanCode39Data(string input)
{
// Convert to uppercase and remove invalid characters
string validChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";
return new string(input.ToUpper().Where(c => validChars.Contains(c)).ToArray());
}
}
パフォーマンス最適化
高容量のバーコード生成およびスキャンアプリケーションでは、パフォーマンス最適化が重要になります。
世代最適化
using Aspose.BarCode.Generation;
using System.Collections.Generic;
using System.Threading.Tasks;
public class OptimizedBarcodeGeneration
{
public async Task GenerateBarcodesParallel(IEnumerable<string> codes, string outputPath)
{
var tasks = codes.Select(async code =>
{
await Task.Run(() =>
{
var generator = new BarcodeGenerator(EncodeTypes.Code39Standard, code);
generator.Parameters.Barcode.XDimension.Millimeters = 0.33f;
generator.Parameters.Barcode.BarHeight.Millimeters = 10;
generator.Save($"{outputPath}/{code}.png", BarCodeImageFormat.Png);
});
});
await Task.WhenAll(tasks);
}
}
認定最適化
using Aspose.BarCode.BarCodeRecognition;
public class OptimizedScanning
{
public string FastScanCode39(string imagePath)
{
using (var reader = new BarCodeReader(imagePath, DecodeType.Code39Standard))
{
// Optimize for speed over accuracy if appropriate
reader.QualitySettings = QualitySettings.HighPerformance;
reader.QualitySettings.AllowOneDFastBarcodesDetector = true;
// Read first barcode only for better performance
if (reader.ReadBarCodes().Any())
{
return reader.ReadBarCodes().First().CodeText;
}
}
return null;
}
}
統合考慮
既存のシステムにバーコード39を統合する際には、これらの建築的な側面を考慮してください。
データベースデザイン
public class BarcodeIntegration
{
// Store both original data and generated barcode metadata
public class BarcodeRecord
{
public string OriginalData { get; set; }
public string BarcodeText { get; set; } // May include check digit
public DateTime GeneratedDate { get; set; }
public string ChecksumUsed { get; set; }
public byte[] BarcodeImage { get; set; }
}
public void StoreBarcodeWithMetadata(string data)
{
var generator = new BarcodeGenerator(EncodeTypes.Code39Standard, data);
generator.Parameters.Barcode.Code39.IsCheckSumEnabled = true;
var record = new BarcodeRecord
{
OriginalData = data,
BarcodeText = generator.CodeText, // Includes check digit
GeneratedDate = DateTime.Now,
ChecksumUsed = "Mod43"
};
// Store in database
SaveBarcodeRecord(record);
}
}
FAQ コード39について
**Q:コード39のバーコッドの最大長さは何ですか?**A:コード39には理論的な長さ制限はありませんが、実践的な考慮は、ほとんどの実装を20〜50文字に限定します。
Q:コード39は下の文字を暗号化できますか?A: 標準コード 39 は上記文字のみをサポートします. 拡張コド 39 または、キャラクターの組み合わせを使用して下記字と追加の ASCII 文字を暗号化することができます。
Q:コード39にチェック番号が必要ですか?A: いや、コード39は自己チェックであり、チェック番号は必要ありませんが、モジュール43チェックキャラクターを追加すると、データの完全性が大幅に向上し、重要なアプリケーションのために推奨されます。
Q:なぜコード39のバーコーディングには、人間が読むテキストにアステリックス()が含まれているのでしょうか。A: エステリックスはコード39の仕様で要求されるスタート/ストップキャラクターです. いくつかの実装は表示されたテキストにそれらを含みますが、他の人は読みやすさを抑制します。
**Q:コード39のバーコッドは色の背景に印刷できますか?**A:コード39はバーと背景の間で高い対比を必要としますが、色の背景が可能であるにもかかわらず、信頼性の高いスキャンのために十分な対照を提供しなければなりません。
**Q: コード39のバーコッドで問題を解決するにはどうすればよいですか?**A: 一般的なソリューションには、印刷解像度のチェック、適切な静かなゾーンを確認、正しいバーコードサイズを確保、スキャナーレンズの掃除、およびスカナーがコーディー39を読むために構成されていることを確認するなどがあります。
Q:第39号と第93号の違いは何ですか?A: コード93は、より低いスペースで設定された同じキャラクターを暗号化することができる高密度の進化です。
Q: スマートフォンカメラで39バーコードを読むことができますか?A: はい、多くのモバイルバーコードスキャンアプリケーションがサポートします。しかし、カメラベースのスキャニングは、特に小型または低品質のバーコーディングよりも信頼性が低いかもしれません。
**Q: コード39のバーコッドに必要な物理的なサイズをどのように計算しますか?**A: 計算: (文字数 × 12 + 25) × X サイズ + 2 静かなゾーン. たとえば、 0.33 mm X の 10 文字のバーコードは、約 53 mm の幅と静かなゾーンを必要とします。
**Q:コード39は、厳しい環境で収納の追跡に適していますか?**A:コード39のエラー耐性は、多くの工業環境に適していますが、非常に厳しい状況下で保護ラベル材料と定期的なバーコッド交換スケジュールを考慮してください。
結論
コード39は、強力なエラー容忍を備えたアルファノミリック暗号化を必要とするアプリケーションのための多様で信頼性の高いバーコーディングシンボロジーであり、そのシンプルさ、幅広いスキャナーサポート、および実証されたトラックレポートにより、倉庫管理、資産追跡、識別システムに優れた選択肢となります。
バーコード39を実施する際には、印刷の質、適切なサイズ、および信頼性の高いスキャンを確保するためにチェック番号の適当な使用に焦点を当てます。
成功するためのコード39の導入の鍵は、その強みと制限を理解し、適切な品質コントロールを実施すること、生成およびスキャンプロセスの一貫性を維持することです。 あなたが新しいインベンチャーシステムを開発しているか、既存のバーコッドインフラストラクチャをアップグレードしているかどうかを問わず、コド39はミッション重要なアプリケーションに必要な信頼性と互換性を提供します。