(zxing.net)一维码Code 128的简介、实现与解码
一、简介
一维码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。
二、实现
1 public ActionResult CODE_128() 2 { 3 Code128EncodingOptions options = new Code128EncodingOptions(); 4 options.ForceCodesetB = false; //如果为true,请不要为数字切换到代码集C. 不知道什么鬼 5 options.PureBarcode = false; //是否将内容字符串显示在图片上。false 为显示 true为不显示 6 options.GS1Format = false; //是否符合GS1 7 options.Width = 150; //图片宽度,根据内容的长度会自动增长 8 options.Height = 75; //图片高度 9 options.Margin = 30; //填充,在图片左右填充空白 30则左右各15 10 11 BarcodeWriter writer = new BarcodeWriter(); 12 writer.Format = BarcodeFormat.CODE_128; 13 writer.Options = options; 14 15 //如需设置图片为其它颜色,使用此段代码 16 //BitmapRenderer renderer = new BitmapRenderer(); 17 //renderer.Foreground = Color.Black; 18 //renderer.Background = Color.White; 19 //writer.Renderer = renderer; 20 21 Bitmap bmp = writer.Write("123456789"); 22 MemoryStream ms = new MemoryStream(); 23 bmp.Save(ms, ImageFormat.Png); 24 ms.Flush(); 25 ms.Position = 0; 26 return File(ms, "application/x-png"); 27 }
测试图像如下:
三、解码