Code 128 规则解析
1.CODE 128 标准
1.1 code 128码格式:
格式:
从左起: 空白区域,起始字符(Start),数据区域(data),校验码(check),结束字符(Stop),空白区域。
所有字符条纹图像都是以黑色开始,白色结束,只有结束字符例外。
1.2 起始字符:
由于128码有三个字符集。所以有三个起始字符。
|
Start A : 表示后面的码值代码是从字符集A中值—— 全部大写字母和标点符号和特殊符号。 Start B: 表示字符集B——全部大小写字符和标点符号。 Start B的值为:六个黑白粗细不一交替地表示为:{2,1,1,2,1,4} ; Start C: 表示字符集C——数字00-99. Start C的值为:六个黑白粗细不一交替地表示为:{2,1,1,2,3,2} |
1.3 数据字符的表示
在128码中所有数据都是形如:d1d2…di ,其中di在(1,4)之间,且1<=i<=6 ,且sum(di) =11。
即总共需要绘制成11条黑白相间的条纹。
校验码算法:
| 校验码=(起始字符值 +第一位数据值*1 +第二位数据值*2+ …. + 第 n 位数据*n )%103; |
1.4 结束字符:
128码结束字符只有一个在编码表中以Stop 来表示,数据为:{2,3,3,1,1,1,2};
2.图形方式输出Code128C条形码
最近的项目牵涉到一维条码打印的问题。条码的选型上倒没什么,因为要求短且仅包含数字,所以决定选用Code128C。在国外的网站上找了点资料研究了下,终于大致搞懂了Code128C的原理和实现方法。
Code128C只能编码长度是偶数的数字串,这是它的前提之一。说起来编码规则很简单,00 - 99 这100个数字每个数字都预先规定好一个条码,然后把原始的待编码字符串两位两位的读取,每个两位都从上面提到的码表中找到对应的条码,追加。
举个例子,我们要打印12345678的Code128c条码。
首先打印Code128c的条码头,bbsbssbbbss。(b代表1个单位宽度的竖线,s代表1个单位宽度的空白)
然后对12345678编码。
我们把它看成 12 34 56 78。12对应的条码是bsbbssbbbss,34对应的条码是bsssbsbbsss,56对应的条码是bbbsssbsbbs,78对应的条码是bbssssbsbss。按次序堆积起来就是了。
现在应该很好理解为什么C型128码可以打印的比较短,就是因为输出的信息被压缩到原来的一半。
接下来就是一个自校验码。计算方法是:(105 + (1 * 12 + 2 * 34 + 3 * 56 + 4 *78)) % 103 = 47。再追加47对应的条码bsssbbbsbbs。
这里有个注意点是,第n组数字要乘以n。比如,12是第一组所以乘1,而34是第二组所以乘2。
最后就是终结符,固定为bbsssbbbsbsbb,也追加。
如此得出一个可以代表条形码的字符串:
bbsbssbbbss bsbbssbbbss bsssbsbbsss bbbsssbsbbs bbssssbsbss bsssbbbsbbs bbsssbbbsbsbb (本字符串中的空格仅作演示,实际编码的时候不会产生空格)
也就是 StartC 12 34 56 78 47 Stop (实际上没空格)
3. Code 128 Barcode Table
| Value | Code Set A |
Code Set B |
Code Set C |
Bar/Space Pattern B S B S B S |
|---|---|---|---|---|
| 0 | SP | SP | 00 | 2 1 2 2 2 2 |
| 1 | ! | ! | 01 | 2 2 2 1 2 2 |
| 2 | " | " | 02 | 2 2 2 2 2 1 |
| 3 | # | # | 03 | 1 2 1 2 2 3 |
| 4 | $ | $ | 04 | 1 2 1 3 2 2 |
| 5 | % | % | 05 | 1 3 1 2 2 2 |
| 6 | & | & | 06 | 1 2 2 2 1 3 |
| 7 | ' | ' | 07 | 1 2 2 3 1 2 |
| 8 | ( | ( | 08 | 1 3 2 2 1 2 |
| 9 | ) | ) | 09 | 2 2 1 2 1 3 |
| 10 | * | * | 10 | 2 2 1 3 1 2 |
| 11 | + | + | 11 | 2 3 1 2 1 2 |
| 12 | , | , | 12 | 1 1 2 2 3 2 |
| 13 | - | - | 13 | 1 2 2 1 3 2 |
| 14 | . | . | 14 | 1 2 2 2 3 1 |
| 15 | / | / | 15 | 1 1 3 2 2 2 |
| 16 | 0 | 0 | 16 | 1 2 3 1 2 2 |
| 17 | 1 | 1 | 17 | 1 2 3 2 2 1 |
| 18 | 2 | 2 | 18 | 2 2 3 2 1 1 |
| 19 | 3 | 3 | 19 | 2 2 1 1 3 2 |
| 20 | 4 | 4 | 20 | 2 2 1 2 3 1 |
| 21 | 5 | 5 | 21 | 2 1 3 2 1 2 |
| 22 | 6 | 6 | 22 | 2 2 3 1 1 2 |
| 23 | 7 | 7 | 23 | 3 1 2 1 3 1 |
| 24 | 8 | 8 | 24 | 3 1 1 2 2 2 |
| 25 | 9 | 9 | 25 | 3 2 1 1 2 2 |
| 26 | : | : | 26 | 3 2 1 2 2 1 |
| 27 | ; | ; | 27 | 3 1 2 2 1 2 |
| 28 | < | < | 28 | 3 2 2 1 1 2 |
| 29 | = | = | 29 | 3 2 2 2 1 1 |
| 30 | > | > | 30 | 2 1 2 1 2 3 |
| 31 | ? | ? | 31 | 2 1 2 3 2 1 |
| 32 | @ | @ | 32 | 2 3 2 1 2 1 |
| 33 | A | A | 33 | 1 1 1 3 2 3 |
| 34 | B | B | 34 | 1 3 1 1 2 3 |
| 35 | C | C | 35 | 1 3 1 3 2 1 |
| 36 | D | D | 36 | 1 1 2 3 1 3 |
| 37 | E | E | 37 | 1 3 2 1 1 3 |
| 38 | F | F | 38 | 1 3 2 3 1 1 |
| 39 | G | G | 39 | 2 1 1 3 1 3 |
| 40 | H | H | 40 | 2 3 1 1 1 3 |
| 41 | I | I | 41 | 2 3 1 3 1 1 |
| 42 | J | J | 42 | 1 1 2 1 3 3 |
| 43 | K | K | 43 | 1 1 2 3 3 1 |
| 44 | L | L | 44 | 1 3 2 1 3 1 |
| 45 | M | M | 45 | 1 1 3 1 2 3 |
| 46 | N | N | 46 | 1 1 3 3 2 1 |
| 47 | O | O | 47 | 1 3 3 1 2 1 |
| 48 | P | P | 48 | 3 1 3 1 2 1 |
| 49 | Q | Q | 49 | 2 1 1 3 3 1 |
| 50 | R | R | 50 | 2 3 1 1 3 1 |
| 51 | S | S | 51 | 2 1 3 1 1 3 |
| 52 | T | T | 52 | 2 1 3 3 1 1 |
| 53 | U | U | 53 | 2 1 3 1 3 1 |
| 54 | V | V | 54 | 3 1 1 1 2 3 |
| 55 | W | W | 55 | 3 1 1 3 2 1 |
| 56 | X | X | 56 | 3 3 1 1 2 1 |
| 57 | Y | Y | 57 | 3 1 2 1 1 3 |
| 58 | Z | Z | 58 | 3 1 2 3 1 1 |
| 59 | [ | [ | 59 | 3 3 2 1 1 1 |
| 60 | \ | \ | 60 | 3 1 4 1 1 1 |
| 61 | ] | ] | 61 | 2 2 1 4 1 1 |
| 62 | ^ | ^ | 62 | 4 3 1 1 1 1 |
| 63 | _ | _ | 63 | 1 1 1 2 2 4 |
| 64 | NUL | ` | 64 | 1 1 1 4 2 2 |
| 65 | SOH | a | 65 | 1 2 1 1 2 4 |
| 66 | STX | b | 66 | 1 2 1 4 2 1 |
| 67 | ETX | c | 67 | 1 4 1 1 2 2 |
| 68 | EOT | d | 68 | 1 4 1 2 2 1 |
| 69 | ENQ | e | 69 | 1 1 2 2 1 4 |
| 70 | ACK | f | 70 | 1 1 2 4 1 2 |
| 71 | BEL | g | 71 | 1 2 2 1 1 4 |
| 72 | BS | h | 72 | 1 2 2 4 1 1 |
| 73 | HT | i | 73 | 1 4 2 1 1 2 |
| 74 | LF | j | 74 | 1 4 2 2 1 1 |
| 75 | VT | k | 75 | 2 4 1 2 1 1 |
| 76 | FF | I | 76 | 2 2 1 1 1 4 |
| 77 | CR | m | 77 | 4 1 3 1 1 1 |
| 78 | SO | n | 78 | 2 4 1 1 1 2 |
| 79 | SI | o | 79 | 1 3 4 1 1 1 |
| 80 | DLE | p | 80 | 1 1 1 2 4 2 |
| 81 | DC1 | q | 81 | 1 2 1 1 4 2 |
| 82 | DC2 | r | 82 | 1 2 1 2 4 1 |
| 83 | DC3 | s | 83 | 1 1 4 2 1 2 |
| 84 | DC4 | t | 84 | 1 2 4 1 1 2 |
| 85 | NAK | u | 85 | 1 2 4 2 1 1 |
| 86 | SYN | v | 86 | 4 1 1 2 1 2 |
| 87 | ETB | w | 87 | 4 2 1 1 1 2 |
| 88 | CAN | x | 88 | 4 2 1 2 1 1 |
| 89 | EM | y | 89 | 2 1 2 1 4 1 |
| 90 | SUB | z | 90 | 2 1 4 1 2 1 |
| 91 | ESC | { | 91 | 4 1 2 1 2 1 |
| 92 | FS | | | 92 | 1 1 1 1 4 3 |
| 93 | GS | } | 93 | 1 1 1 3 4 1 |
| 94 | RS | ~ | 94 | 1 3 1 1 4 1 |
| 95 | US | DEL | 95 | 1 1 4 1 1 3 |
| 96 | FNC 3 | FNC 3 | 96 | 1 1 4 3 1 1 |
| 97 | FNC 2 | FNC 2 | 97 | 4 1 1 1 1 3 |
| 98 | SHIFT | SHIFT | 98 | 4 1 1 3 1 1 |
| 99 | CODE C | CODE C | 99 | 1 1 3 1 4 1 |
| 100 | CODE B | FNC 4 | CODE B | 1 1 4 1 3 1 |
| 101 | FNC 4 | CODE A | CODE A | 3 1 1 1 4 1 |
| 102 | FNC 1 | FNC 1 | FNC 1 | 4 1 1 1 3 1 |
| 103 | Start A | Start A | Start A | 2 1 1 4 1 2 |
| 104 | Start B | Start B | Start B | 2 1 1 2 1 4 |
| 105 | Start C | Start C | Start C | 2 1 1 2 3 2 |
| 106 | Stop | Stop | Stop | 2 3 3 1 1 1 2 |
4.参考文献
http://blog.csdn.net/jato333/article/details/3748375
http://blog.csdn.net/dengchonglin/article/details/7680722
Code 128 规则解析的更多相关文章
- apache伪静态规则解析
apache伪静态规则解析 最近有个客户有个要求,昨天折腾了一会,没解决,今天没啥就多学习学习 还是根据例子来学习比较快 1 简单的重定向规则 RewriteEngine On //启动规则 Rewr ...
- 一维码Code 128简介及其解码实现(zxing-cpp)
一维码Code 128:1981年推出,是一种长度可变.连续性的字母数字条码.与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用弹性也较大. Cod ...
- (zxing.net)一维码Code 128的简介、实现与解码
一.简介 一维码Code 128:1981年推出,是一种长度可变.连续性的字母数字条码.与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用弹性也较大 ...
- 常见条码类型介绍(Code 39、Code 128、EAN-8、EAN-13、EAN-128、ISSN、TIF、TIF-14、UPC(A)、UPC(E))
常见条码类型,如下: 1.Code 39 Code 39,又称为"Code 3 of 9",是非零售市场中最常用的格式,用于盘存和跟踪.Code 39码编码规则简单,误码率低.所能 ...
- C# 条形码 生成函数 (Code 128 标准
C# 条形码 生成函数 (Code 128 标准参考:GB/T 18347-2001) 最近在做单据打印,发现客户要求用到条形码,在网上找了,发现只有一些条形码的标准,但打出来发现根本不能扫,还要加某 ...
- GitHub上传不了的解决 ssh: connect to host github.com port 22: Bad file number git did not exit cleanly (exit code 128)
问题情况 本来一直用的是github的客户端,结果现在上传的时候出问题了,去网站上看,新项目已经创建,但是代码却怎么都上传不上去.于是只好用命令行的方式解决. Tortoisegit上是这样说的: g ...
- 二维码(QR Code)生成与解析
二维码(QR Code)生成与解析 写在前面 经常在大街上听到扫码送什么什么,如果真闲着没事,从头扫到位,估计书包都装满了各种东西.各种扫各种送,太泛滥了.项目中从没接触过二维码的东东,最近要使用,就 ...
- [Jenkins][git]构建时提示Caused by: hudson.plugins.git.GitException: Command "/usr/bin/git reset --hard" returned status code 128:
--------------------- 如需转载,转载请注明出处. --------------------- 今日发现所有IOS构建相关的job全部失败,并提示如下错误: ERROR: Erro ...
- 解决git did not exit cleanly (exit code 128)
最近在用git提交代码到部门服务器上的时候,总是有 提示 git did not exit cleanly (exit code 128).网上有2种解决方式: 1.替换路径 1.鼠标右键 -> ...
随机推荐
- jsp 学习 第3步 - el 自定义方法 tld 说明
使用 el 的过程中,需要使用到后端代码处理逻辑,这个时候我们就需要自定义 方法. 如我们后端代码定义如下: package com.rhythmk.common; public class FncH ...
- 将linux用在开发环境中
我是如何将linux用在开发环境中的 1.为什么不直接安装Linux在主机 一直想深入学习一下linux的使用,于是将家里的笔记本装了linux系统,但是要将自己的系统打造一个适合开发的环境确实是一件 ...
- Linux 怎么查看服务的启动进程所占用的目录
lsof简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以 ...
- Linux系统管理员面试50题
命令nslookup是做什么的? Nslookup 是一个 监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具. 你如何把CPU占用率最高的进程显示出来? top -c 按照cpu排序 如果 ...
- 架设基于StrongSwan的L2tp/IPSec VPN服务器
架设基于StrongSwan的L2tp/IPSec VPN服务器 参考: http://agit8.turbulent.ca/bwp/2011/01/setting-up-a-vpn-server-w ...
- 《ASP.NET1200例》当前上下文中不存在名称configurationmanager
当前上下文中不存在名称ConfigurationManager的解决方法 今晚做项目在DBHelper.cs类中的数据库连接要改到web.config里面调用,结果在编译的时候却发现提示错误: 当前上 ...
- iOS NSURLConnection和异步网络请求
在日常应用中,我们往往使用AFNetworking等第三方库来实现网络请求部分.这篇文章会简要地介绍一下如何使用NSURLConnection来进行异步的网络请求. 我们先看一个小demo - (vo ...
- codeforces C. Fixing Typos 解题报告
题目链接:http://codeforces.com/problemset/problem/363/C 题目意思:纠正两种类型的typos.第一种为同一个字母连续出现3次以上(包括3次):另一种为两个 ...
- Emacs 24.3 配置JDEE(http://blog.csdn.net/csfreebird/article/details/19033939)
最近要重回Java编程,所以打算在最新版本的Emacs 24.3上配置JDEE,听说会有些问题,特此记录安装过程. Emacs 24.3内置了CEDET, 版本是2.0, 这是一个让人困惑的事情,因为 ...
- JsRender语法
{{:#data.Name}} 或 {{:Name}} 直接显示html格式{{>#data.Name}} 或 {{>Name}} 转义显示html字符 if else {{if bool ...