一、简介
一维码Code 128:1981年推出,是一种长度可变、连续性的字母数字条码。与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用弹性也较大。
Code 128特性:
- 具有A、B、C三种不同的编码类型,可提供标准ASCII中128个字元的编码使用;
- 允许双向扫描;
- 可自行决定是否加上检验位;
- 条码长度可调,但包括开始位和结束位在内,不可超过232个字元;
- 同一个128码,可以由A、B、C三种不同编码规则互换,既可扩大字元选择的范围,也可缩短编码的长度。
Code 128各编码方式的编码范围:
- Code 128 A:标准数字和字母,控制符,特殊字符;
- Code 128 B:标准数字和字母,小写字母,特殊字符;
- Code 128 C/EAN 128:[00]-[99]的数字对集合,共100个,即只能表示偶数位长度的数字。
Code 128编码规则:开始位+[FNC1(为EAN 128码时加)] + 数据位 + 检验位 + 结束位。
Code128检验位计算:(开始位对应的ID值 + 每位数据在整个数据中的位置 * 每位数据对应的ID值) % 103。
二、实现
public ActionResult CODE_128()
{
Code128EncodingOptions options = new Code128EncodingOptions();
options.ForceCodesetB = false; //如果为true,请不要为数字切换到代码集C. 不知道什么鬼
options.PureBarcode = false; //是否将内容字符串显示在图片上。false 为显示 true为不显示
options.GS1Format = false; //是否符合GS1
options.Width = ; //图片宽度,根据内容的长度会自动增长
options.Height = ; //图片高度
options.Margin = ; //填充,在图片左右填充空白 30则左右各15 BarcodeWriter writer = new BarcodeWriter();
writer.Format = BarcodeFormat.CODE_128;
writer.Options = options; //如需设置图片为其它颜色,使用此段代码
//BitmapRenderer renderer = new BitmapRenderer();
//renderer.Foreground = Color.Black;
//renderer.Background = Color.White;
//writer.Renderer = renderer; Bitmap bmp = writer.Write("");
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Png);
ms.Flush();
ms.Position = ;
return File(ms, "application/x-png");
}
测试图像如下:
三、解码