Code 128 に関するかなり網羅的なウィキペディアの記事を見ると、Code A、B、および C と呼ばれる 3 つの文字セットが含まれていることがわかります。
128A (コード セット A) – ASCII 00 ~ 95 (0 ~ 9、A ~ Z および制御コード)、特殊文字、および FNC 1 ~ 4
128B (コード セット B) – ASCII 32-127 (0 ~ 9、A ~ Z、a ~ z)、特殊文字、および FNC 1 ~ 4
128C (コード セット C) – 00–99 (1 つのコード ポイントで 2 桁をエンコード) および FNC1
大文字と小文字が混在する文字列をエンコードするため、コード B を使用します。
通常のスタート コード B信号: Î
(0xCC ascii 204) をプレフィックスとして、通常のストップ コード Ó
(0xCE ascii 206) をポストフィックスとして使用します。
char StartCodeB = (char)204;
char StopCode = (char)206;
エンコードされた文字列は次のように作成できます。
string stringToPrintAsBarCode = StartCodeB + "King Kong" + checkSum + StopCode;
ところで: いくつかのバーコード フォントが他のものよりもうまく機能することがわかりました。たとえば、スペースの印刷に関してはそうです。
また、Start&Stopコードに加えて、code128 でエンコードされた文字列にはチェックサム文字も含まれている必要があることに注意してください。これら 3 つの文字のいずれかまたはすべてを省略すると、印刷されたバーコードをスキャンできません。
あなたの例では、「8」はチェックサム文字です。
以下は、特定のテキストと特定の開始コードのチェックサムを計算するルーチンです。
static char checkSum128(string data, int startcode)
{
int sum = startcode;
for (int i = 0; i < data.Length; i++)
{
sum += (i + 1) * ((byte)(data[i]) - 32);
}
return (char)((sum % 103)+32);
}
そして、これは与えられた開始コード文字で与えられたテキストをエンコードする作業ルーチンです:
string EncodeToCode128(string text, char CodeABC)
{
char Stop = (char)206;
char StartCode = CodeABC == 'A' ? (char)203 :
CodeABC == 'C' ? (char)205 : (char)204;
char check = checkSum128(text, (byte)StartCode - 100);
return StartCode + text + (char)check + Stop;
}
次のように使用します。
label_barCodeFont.Text = EncodeToCode128("Hello 2017", 'B');
結果は次のとおりです。
これはかなり単純で、すべての文字が同じ特定のコード セットにあることに依存していることに注意してください。そうでない場合は、それを展開して文字をテストし、別のコード セット (おそらくコード A) の前に適切なシフト コードを挿入する必要があります。