查看相当详尽的关于 Code 128 的Wikipedia文章,您可以看到其中实际上有三组字符,称为 Code A、B 和 C。
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(使用单个代码点编码两个数字)和 FNC1
您想对混合大小写的字符串进行编码,因此您想使用 Code 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 编码字符串还必须包含校验和字符。如果您遗漏了这三个字符中的任何一个或全部,则无法扫描打印的条形码!
在您的示例中,“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)中的那些之前插入一个合适的移位代码。