ここにはいくつかの問題があります。
(3103)2775
まず、正味重量を表す固定長のアプリケーション識別子 (AI) フィールドを含む元のバーコードのテキストを読み間違えています。
(3013)2675
無効なコードを含むコードを記述しました。AI (3013) はありません。残念ながら、これは、可変長フィールドであるアイテム カウントを表す正当な AI (30) とのプレフィックス マッチになります。したがって、後続のフィールド ターミネータ文字 (FNC1) がないため、デコーダはコードの最後まで残りのデータを AI (30) に読み取り続けます。これは多くの項目です。実際には 8 桁以上の価値があるため、リーダーが障害を指摘する可能性があります。
この回答の「抽出」部分は、有効な GS1-128 シンボルを生成するために GS1 データが Code 128 バーコード内でエンコードされる方法の背景を提供します。
GS1 データをエンコードするつもりだったと仮定しましょう(01)08437013308045(3103)2675(15)161201(10)150518
。
Code 128 でエンコードする必要がある生データは{FNC1}0108437013308045310326751516120110150518
.
これは次のように導き出されました。
- データは FNC1 フラグ文字 (GS1 形式のデータの存在を示す) で始まります。
- AI を囲む括弧は省略されています。
- データは固定長の AI のみで構成されているため、可変長フィールドを FNC1 区切り文字[*]で終了する必要がある場合はありません。
[*] GS1 一般仕様§3.2「数字順の GS1 アプリケーション識別子」で提供される AI のリストは、追加データが続く場合に FNC1 文字による終了を必要とするかどうかを示していることに注意してください。
この知識は、TCPDF のコードにどのように変換されますか? 申し訳ありませんが、これは役立つかもしれません:
変数$codeString
は次のように定義する必要があります。
$codeString = chr(241).'0108437013308045310326751516120110150518';
これは、TCPDF が ASCII 序数 241 を使用して FNC1 文字を示すことを示す、サポート フォーラムの回答へのリンクが正しいことを前提としています。(これが当てはまるかどうかは疑問です。)それが機能する場合、これはライブラリ固有の選択であり、値 241 を選択したという事実をあまり読まないでください。非データ文字のエンコードの詳細については、こちらを参照してください。 FNC1など。
また、シンボルをモード A (数字、大文字、および制御文字) に制限するC128A
パラメーターtype
に渡すことにも気付きました。 write1DBarcode
) 物流アプリケーションに使用されるほとんどの標準的な機器でスキャンできます。
Code 128 は、数字の倍密度圧縮を提供するモード C をサポートしているため、これを使用する必要があります。おそらく、TCPDF の自動エンコードが適切であり、今後作成するシンボルには文字を含める必要があると仮定して、(auto) を渡すtype=C128C
か、 (auto) によって使用する必要があります。type=C128
$label->write1DBarcode($codeString, 'C128', $x, $y, $w, $h);
バーコードの下の人間が読めるテキストに関する限り、これが適切にエンコードされたデータに対して正しく表示されない場合は、TCPDF に対してバグ レポートまたは機能リクエストを提出する必要がある場合があります。