[译]ISO/IEC 18004-2015 二维码标准文档(2)

上回书咱们说道,第六章,下面从第七章开始继续


7     环境需求

           7.1  编码流程概览

                 下面的内容介绍了 输入的数据转换为二维码符号的过程

                 步骤1   数据解析

                 要将输入的数据流,识别为其中待编码的各种字符集。QR标准(不是MICRO)支持扩展渠道功能,这样可以使得默认字符集之外的内容可以被编码。QR CODE支持多种模式,使得多种字符内容可以被有效率的编码(具体看7.3章节)。  在将字符编码为二进制字符串之前,有必要对其编码模式进行切换,找到最佳的模式。 选择纠错码级别。 如果用户没有手动制定版本,那么我们需要采用能容纳这些的数据的最小版本。完整的版本列表,查看表1

                 步骤二  数据编码

                 将字符按照 7.4.2和7.4.6的规则,强制转换为比特流。在每个模式片段之前插入模式标识,在编码数据的结尾要加上结束符号。  然后将字符流分割为8BIT一组,并且根据版本要求的 数据 codeword数量,对其他位置进行填充。

                  步骤三  纠错码编码

                  将编码完成的字  按照要求的块数量分散开(表9中有定义),来保障纠错算法可以实施。为每一个块 生成纠错码字,将纠错码的字添加到字的尾部。

                  步骤四  重构最后的信息

                   按照7.6(步骤三)的说明将各个模块的数据和纠错码进行织入,如果需要填充上剩余位置。

                  步骤五    矩阵转换

                 将所有的字进行定位,并且添加定位符,分割线,匹配符,如果需要还要加上校正符。

                   步骤六    数据遮罩

                     将数据遮罩应用到编码区域,在选择数据遮罩模式的时候需要考虑黑白像素之间的评价,最小化符号之间的冲突。

                    步骤七   格式和版本信息

                    生成格式和版本信息(在可添加)的地方,并且完成二维码的绘制。


table1



7.2  数据解析

解析输入的数据串来决定是采用默认或者是扩展的ECI模式来解析内容。具体的编码方式可以看7.4章节的描述。从数字模式转换为日本字模式,每个字符都需要更多的比特空间。所以我们需要在一个符号编码切换到另外的编码,来尽可能减少比特数据流的长度。这样至少其中的某一部分或者几个部分可以更有效率的。比如 数字序列可以按照数字文本模式解读。理论上最有效率的模式是每个数据字符需要最小的比特长度的,但是有些时候模式的指示符号会被跳过,而且这个和每次模式切换的字符长度有关。在一些最短暂的比特流字符串可能不会被此都会转换。并且因为二维码的数据容量的增长步骤和版本是分离的,所以我们可能没必要每次都以最有效率的方式解析。

对于使用最小的比特流长度的说明文档请看 axnex 1,在Micro qr符号上,也提供了在更小的版本上可以使用的模式约定, Axnexj.2 说明了  micor qr  如何在众多的组合中和选取最适合两种模式组合。


7.3 模式


7.3.1  普通模式

                       下面定义的模式,是基于字符本身的数值,并且由默认的ECI进行字节分配。当另外一个ECI被强制指定(只存在于QR Code模式中)时,byte的数值除了制定的字符分配模式外,还需要自主选择更合适的压缩模式。举个例子,当一串字符串完全由30-39之间的十六进制组成时,这个时候应该使用纯数字模式,这种时候的压缩模式,应该使用数字或者字母的压缩模式。

7.3.2    扩展模式

                   扩展渠道说明协议由AIM公司确定。国际技术标准允许允许输出的数据流与默认的字符集不同。 ECI 协议在很多数字符号中是一致的,他提供了一致的方法在打印和解析之前对字节数据进行解释。ECI 不被MICRO QR支持。

                  QRCode的默认ECI 是000003  意思是iso8859-1字符集

                   使用其他字符集国际标准需要使用ECI协议,比如JIS8 和Shift JIS8 使用的是ECI000020

                   ECI的工作模式,是在该数据中插入一个转义字符,后面一般会跟着其他的模式标识(比如标识数据)这个字符会一直生效,知道消息结束,或者遇到另外一个转义字符。


7.3.3  数字模式

数字模式由纯数字(0-9)或者字节数据(16进制30-39)。通常三个数字字符被10个bit标识。

7.3.4  数字文本模式

数字文本模式由45个字符集合内的数据编码而成。包括  十个数字 0-9(30-39 hex)26个字符(A-Z)(41-5A  HEX),以及9个符号(SP,$,%,*,+,-,./,:)(20,24,25,2A,2b,2d-2f,3a    HEX).正常情况下两个字符被11个bit所标识


7.3.5  字节模式

在此模式下,每个字符都被编码为8比特。

在封闭系统国家或者手动制定的应用程序中,一个修改过的八位字符集可以被使用。比如ISO8859-1中的部分约定。  当字符集被默认修改时,解码的应用程序应该遵顼此约定。

M1.M2 格式不可以使用BYTE模式。

7.3.6  日本字模式


日本字被有效率的编码的规则是 符合jis x 0208的Shift jis system编码保持一致的。SHIFT JIS的数值是由 JIX0208 变化而来的。JIX 0208给给了详细的编码转换过程,每个2字节的字符会被转换为13比特的长度。

当制定了一个特殊的字符集,使得字节数值有可能是十六进制的81-十六进制的9F   并且/或者  E0-EB范围内。这样并不能明确的标识这是使用的日本字模式。 读取系统并不能确定这是否是一个双子节字符的开始位置。 所以应该在数据序列中遇到一段符合  ranji压缩规则的字符串时再对其进行操作(换句话说,开始字符在81-9f  或者/并且 尾部字符是 40-FC  7F除外,或者是EB后面跟着40-BF)  H1-1 特征 用图像的形式展示了这种字节组合。

M1 M2格式不能使用日本字模式

7.3.7  混合模式

QR CODE 内的数据可能包含7.3.2-7.3.9章节之间的模式的各种组合。

MICOR QRCODE内的数据可能包含7.3.3-7.3.37之间各种模式的组合。

附录J 给出了QR CODE模式如何在混合模式下选择最有效率的标识方式的指引

附录J-3  给出了MICRO QR模式下可以使用两种模式混合的版本


7.3.8  结构添加模式

结构体添加模式用于将一个数据分割为一定数量的二维码符号,只有所有的符号都被解析了,包含数据的消息才能被正确的重建。结构数据头会被添加到所有符号中去,来标识整个数据的长度和当前符号在数据中位置,以及确定解析的符号属于同一条消息。详细的结构化添加模式信息可以查看第8章节。

结构化模式添加不适用于MICRO模式


7.3.9  FNC1 模式

FNC1模式是用来在数据中包含特殊格式的信息的。  在“1号位置”指明了数据格式是依照GS1  通用标准。“2号位置”指明了数据结构是遵循着AIM 公司制定的工作应用程序。FNC1模式作用于整个符号,而且他不会被后面的模式指示符号所影响。

注意   “1号位置”和“2号位置”  并不是指的真实的位置。当使用使用等式中使用时,他们的位置依赖于128符号的编码位置

FNC1 模式不是适用于MICRO QRCODE


7.4   数据编码

7.4.1 数据字句

输入数据流 是由一个或者几个指定编码模式形成碎片的比特流组成的。在默认的ECI模式下,比特流的编码规则是由第一个模式指示符号决定的。如果初始的ECI不是默认的ECI,比特流的编码方式是由跟在第一个碎片后面的ECI 头部信息决定的。

ECI应该具备以下字段(如果存在ECI):

---  4比特长度的ECI模式指示符号

---- ECI 指示编码(8/16/24 比特)

ECI应该以指示符号开头(这是最重要的),并且以指示编码结尾。

比特流的剩余部分由下列元素组成:

----模式指示符

----字符数量指示

----具体的数据流

所有的模式片段都应该以  模式指示符开始(最重要的)并且以具体的数据流最后一个比特作为结尾(并不重要)。在模式片段之间不应该存在分割符号,因为他们的数据长度已经被规则严格限制了。


如果根据输入的数据按照指定的模式编码的步骤,在7.4.2-7.4.7章节中定义。 表2定义了每种模式的指示符号。表3以了指示符号的长度,该符号的长度会随着符号的版本而改变。



表2中定义了数据的结束符号,是3-9个0组成的。他的意思是为了填充版本剩余的数据容量和结束符号之间的空间。模式的结束符号并不是这个样子。


7.4.2   扩展渠道解释模式

7.4.2.1   常规情况

这种模式用来编码数据时,使用某种数据结构来替换原有的比特数据(比如,替换字符集)在遵循AIM ECI标准的前提下。 这个标准约定了数据的预处理方案,这种方案的开始标识是0111

扩展渠道解释模式仅仅适用于那些解析器已经开启支持的情况。如果解析器没有开启支持,那么将不会被识别。

被写入ECI的数据应该是被编码系统所操作的一组字节数据


位于ECI内部的数据将会被以最有效率的字节方式编码,而忽略其本身所自带的意义。举个例子,30-39的十六进制数据将会被数字0-9所替代,即使他们本来代表的意义不是数字。为了确定字符串长度的指示符号,字节的数量(或者日本字模式下,字节对的数量)应该被使用。

7.4.2.2  ECI指示器

所有的扩展渠道解释器都由一个六位数长度的数字来标示,用于表示ECI指示符由几个字组成,1还是2,或者3.最多三个。他们的编码规则看表4,ECI的标识符被编码为字符串时,一般会展现为十六进制5C的样子,在ISO8859-1中时反斜杠,在JIS编码中展现为 ¥符号, 遵循着六位数字的分配符号。当十六进制的5C 作为真实数据中出现的时候。应该在ECI编码前将数据翻倍。

当一个单独的5C数据作为输入时,应该插入一个符合指示器规则的ECI标识符号,如果遇到两个连续的5C数据则应该插入两次5C的真实数据。

当解码的时候,二进制模式下的第一个 ECI指示关键字(跟在ECI标示关键字后面的字),决定了ECI标示的长度. 跟随在比特0前面的比特1的长度 决定了,当前ECI定位符号后面的字的长度。在比特序列0以后的比特是ECI定位符真正的二进制数据。比ECI定位符长度更短的ECI数据可能会被用其他的方式所编码,但是更好的版本是不要短于定位符长度、


举例:

从被希腊语编码的数据中恢复数据,使用ISO 8859-7(ECI 000009)编码,符号版本是1H

被编码的数据:    \000009XXXXX(字符串数值  a1  a2   a3   a4  a5)

ECI 模式符号     0111

ECI定位符号 000009      00001001

模式标示    0100

字符串长度标示 5      00000101

实际字符数据           10100001 10100010 10100011 10100100 10100101

最终数据   0111 00001001 0100 00000101  10100001 10100010 10100011 10100100 10100101

14.3章节介绍了解码过程。


7.4.2.3  多ECI模式

AIMECI  制定的标准中约定了当一个ECI符号内部存在另外一个ECI字句的情况。举个例子来说,某种字符编码的数据序列中,可能出现了另外的压缩或者加密的情况(而此压缩和加密的规则并没有在初始化时约定)。或者一个字符编码集合中可能会出现另外一个字符编码的情况。当在一个ECI中出现其他ECI数据时,需要遵循7.4.2.2中的约定,并且要提交一个新的模式片段。

7.4.2.4   ECI和结构化添加

所有被调用的ECI模块都要遵循上面讲的规则,还有AIM定义的约定,直到编码数据结束,或者切换到另外一个ECI(0111为标识符)。如果ECI中的编码的数据中存在两个或者更多的结构化添加模式,需要强制给所有的ECI加上一个头部信息,头部信息由ECI模式标识符和ECI定位数组成。他们应该在结构添加数据头之后立刻跟上。字句中的ECI也以此递归。

7.4.3  数字模式

输入的字符串数据,会被分组成由三个数字组成的小组,并且每个小组的数据都会被切换成10比特的2进制模式。如果输入的数字,那么不会一定是三个数字组成。一位或者二位的数据会被转换为4比特或者7比特。二进制的数据会被串联起来,并且添加上模式标示和字符串长度标示作为前缀。数字模式的标识符由两种 一种是QRCODE标准的四个比特,或者是表2中第一的MICRO标准的符号。字符长度的标示符号数量,在表3中也有定义。输入的数据需要先被转换为二进制数据长度,并且将此数据长度添加到模式标示和数据子句之间。

例子1   对于1H级别的数据来说

输入数据为 01234567

转换为三个数字分组  012 345 67

按组进行二进制转换   012  转换为 0000001100   345转换为 0101011001     67转换为1000011

讲数字链接成数据子句   0000001100 0101011001 1000011

讲字符长度转换为2进制的标示(1H版本是10个比特长度)  8  -> 0000001000

模式标识符0001 和比特长度加到前面形成结果

0001  0000001000  0000001100  0101011001  1000011

例子2   对于MICRO格式来说  (M3-M格式)

1  输入数据 0123456789012345

2  三个数进行分组  012 345 678 901 234 5

3   各自转换为二进制  012 -> 00000011000    345-> 0101011001   678 ->1010100110   901->1110000101   234->0011101010  5->0101

将它们串联起来 0000001100 0101011001 1010100110 1110000101 0011101010 0101

4   将字符数量切换至二进制(M3-M 是5比特长度)

16  ->  

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,413评论 25 707
  • 四十多年来,这三十天使人难忘,叫人激动! 无意间的一次刷屏,邂逅了这个‘’好报三十天写作‘’群,于是,年少时的那个...
    宝天曼风景阅读 287评论 0 0