基于有限状态机的UCC/EAN-128条码编程实现

2016-02-07 07:03安美君王淑
中国医疗设备 2016年9期
关键词:校验码状态机字符串

安美君,王淑

1.上海健康医学院 医学电子与信息工程系,上海 200093;2.上海市儿童医院 信息科,上海 200040

基于有限状态机的UCC/EAN-128条码编程实现

安美君1,王淑2

1.上海健康医学院 医学电子与信息工程系,上海 200093;2.上海市儿童医院 信息科,上海 200040

本文采用有限状态机理论,讨论了UCC/EAN-128条码3种字符集的使用条件,3种编码方式互相转换的流程,展示了从信息字符串转变成编码字符串的处理过程,设计了一种链表结构存储编码字符串,实现了条码的最小编码,为后续检验码计算和图案生成提供了方便。整个模块已经应用在医院临床用血管理系统中并获得了良好效果。

医院信息系统;临床用血;UCC/EAN-128条码;有限状态机;条码编程

0 引言

UCC/EAN-128条码[1]是一种可同时描述字母、数字的高密度条码,该条码的每个字符由3条和3空组成,总宽度为11个基本宽度单位,每个条或空的宽度由字符的编码决定。UCC/EAN-128条码有3种字符集,根据条码的具体内容特点,可以采样合适的字符集,从而获得最短长度编码。同一条码允许有多个字符集组成,最小码长只有3位、最长码长可达48位,为非定长条码;条码前几位(2~4位)称为标识位,指示后续的数据长度和所代表的含义;可同时标识多组数据,中间用功能符分隔,检验码统一计算;同一信息可以有3种不同编码格式;相比其它一维条码,它能标识更多的字符,蕴含的信息量更大;在物流[2]和医院信息管理[3-6]等领域获得广泛应用。

GB/T15425-2002标准附录A声明了UCC/EAN-128条码符号长度最小原则和对字符串编码时起始符、切换符和转换字符与原始信息的组合方法。目前的文献资料中鲜见关于UCC/EAN-128条码生成算法,大多讨论EAN-13码[7]、Code39码[8-9],贾海生[10]等讨论了EAN-128码纯数字的编程实现,没有考虑数字、字符和控制码混合的条码编程情况。本文利用有限状态机的基本原理和GB/T15425-2002标准附录A中声明的最小原则,设定状态转换条件,通过对原始编码信息扫描,确定每个字符编码时的状态,从而实现条码的最短编码。

1 UCC/EAN-128条码

UCC/EAN-128条码由起始码、功能码、信息码、停止码、校验码组成[1],见图1。该条码有3个字符集,分别为字符集A、B和C,每种字符集有不同的编码方式。字符集A包括所有标准的大写英文字母、数字字符、控制字符、特殊字符及辅助字符;字符集B包括所有标准的大写和小写英文字母、数字字符、特殊字符及辅助字符;字符集C包括00~99的100个数字以及辅助字符。因为字符集C中的1个条码字符表示2个数字字符,因此使用该字符集表示数字信息可以比其它字符集信息量增加1倍,适合描述连续的数字符号。A、B、C 3个字符集可以交替使用,也可以用SHIFT功能对一个字符进行字符集之间的转换。

图1 UCC/EAN-128条码组成结构

2 有限状态机

有限状态机是有限个状态以及在这些状态之间的迁移和动作等行为的数学模型,通常由状态、迁移、事件、动作和条件等几个基本要素构成。状态是从系统开始到现在时刻的行为所产生的综合结果,具有暂时稳定性,在外部或内部条件的影响下,系统可以从一种状态迁移到另一种状态,系统状态迁移图指示其变化情况;事件是在特定时空发生的对系统有意义的改变,一般会引起状态迁移,它既可以来自外部也可由内部生成;动作是在给定时刻对要进行的活动描述。有限状态机系统用动作来响应内外部事件,响应结果与系统当前状态和外部条件有关。

基于事件驱动的有限状态机思想在软件工程中主要应用于多分支选择结构中,它能采取多种操作来响应不同的事件。计算机中正在运行的程序可以看成是一种离散系统,在各个时刻都具有特定状态,该状态可用程序中所有变量的值和程序堆栈指针来确定。

在对UCC/EAN-128条码进行编码时,首先需要确定当前使用的字符集类型,然后根据后续要编码字符串特点,决定是否继续使用当前字符集或者切换到其它字符集,UCC/EAN-128条码编码特征适合用有限状态机模型进行处理。

3 UCC/EAN-128条码编码原则

在UCC/EAN-128条码符号中,通过使用不同的起始、切换和转换字符的组合,可以对相同的数据有不同的表示,下述内容为状态迁移的条件和动作[1]。

(1)如果数据以4位或4位以上的数字型数据符开始,则使用起始符C;如果数据中在小写字母字符之前出现ASCII控制字符,则使用起始符A;其他情况,使用起始符B。

(2)如果使用起始符C,并且数字个数为奇数,则在最后一位数字前插入字符集A或字符集B。

(3)如果在字符集A或字符集B中同时出现4位或4位以上的数字字符,且数字型数据字符的个数为偶数,则在第一个数字之前插入CODE C字符将字符集转换为字符集C,若数字型数据字符的个数为奇数,则在第一个数字之后插入CODE C字符将字符集转换为字符集C。

(4)当使用字符集B,并且数据中出现ASCII控制字符时,如果在该控制字符之后,在另一个控制字符之前出现一个小写字母字符,则该此控制字符之前插入转换字符;否则,在控制字符之前插入CODE A将字符集转换为字符集A。

(5)当使用字符集A,并且数据中出现小写字母字符时,如果在该小写字母字符之后,在另一个小写字母字符之前出现一个控制字符,则在该小写字母字符之前插入转换字符;否则,在小写字母字符之前插入CODE B将字符集转换为字符集B。

(6)如果在字符集C中出现一个非数字字符,则在该非数字字符之前插入CODE A或CODE B。

按照上述规则,UCC/EAN-128条码编码状态迁移图,见图2[11],序号①~⑦代表状态迁移条件,例如序号⑦代表从字符集B编码模式迁移到字符集C编码模式,触发条件是后续编码的字符串中至少有4个连续的数字字符。

图2 UCC/EAN-128条码编码状态迁移图

4 编码实现

按照UCC/EAN-128条码的组成规则,在确定需要生产的条码信息字符串后,先生产左边空格编码,然后扫描信息字符串,确定开始使用的字符集,明确当前状态,再以后续要编码的字符为输入条件,结合当前状态,确定是否继续维持使用当前字符集,循环进行处理直至要编码信息字符串结尾[12-13]。

在处理中有状态迁移行为发生,最后的编码字符串与编码信息字符串不一致,它中间可能包含一些控制码,在计算校验码时,所有编码字符串均要参与运算,其权值与所在位置相关,最后的编码字符集决定校验码的归属。为方便计算校验码和生成条码图案,可采用一个链表结构,保存编码字符串,每个节点保存一个编码字符,新增节点加在链表尾部。从链表头开始遍历,可以很方便计算校验码,亦可按此顺序生成条码图案,见图3。

图3 编码字符存储示意图

例如,输出条码集AbcD12345E,经过上述编码算法处理,得到的UCC/EAN-128编码集如下:Start B,FUNC1,A,b,c,D,Code C,12,34,Code B,5,E,校验码,Stop;每个字符集的状态分别是:2,2,2,2,3,3,2,2,最后校验码使用Code B字符集,状态为2。生成的条码,见图4。

图4 UCC/EAN-128条码

4 结语

本文基于有限状态机的原理,结合UCC/EAN-128条码的最小编码要求,分析了该条码的三种字符编码转换条件,实现了从信息字符串到编码字符串的处理过程。设计了一种链表结构,存储包含控制码的编码信息,通过对链表进行遍历,实现了校验码计算和条码图案生成。整个模块已经应用在医院临床用血管理系统中,获得了较好效果。

[1]GB/T 15425-2002,EAN·UCC系统128条码[S].

[2]杨应全,沈焰,李雪茹.图书馆条形码标签的设计方法[J].重庆工业高等专科学校学报,2005,20(1):66-68.

[3]潘宁,邓宾.条形码技术在临床输血中的应用[J].中国医疗设备,2013,28(3):86-87,164.

[4]黄峭,朱春平,卢桂芳,等.条形码技术在门诊采血工作中的应用与流程管理[J].护理实践与研究,2010,7(1):66-66.

[5]陈兰,周湘江,罗安燕.临床输血业务管理信息系统的设计与应用[J].中国医疗设备,2014,29(12):46-49.

[6]吴森.基于条形码的门诊挂号系统研究与设计[J].计算技术与自动化,2014,33(2):115-120.

[7]周超.C++中一维条码生成与打印的设计实现[J].电脑知识与技术:学术交流,2007,3(14):415-416.

[8]王晓东.VC++在条形码打印中的应用[J].科技广场,2007,(5):153-155.

[9]杨靖,管艳辉,曹健慧.图书馆常用条形码Code 39的编码原理及打印设计[J].河北科技师范学院学报(社会科学版),2006,5(3):84-88.

[10]贾海生,杨小宁.EAN-128条码打印技术的研究与实现[J].宁夏大学学报(自然科学版),2005,26(4):336-338.

[11]李伟,门佳.一种事件驱动有限状态机的编程实现框架[J].计算机与现代化,2014,(6):116-119.

[12]婷婷,孙精科.基于有限状态机的工作流实例状态迁移研究[J].软件导刊,2014,13(12):39-41.

[13]周莉娟,刘心刚,张志鹏.基于有限状态机的雷达状态模型建立[J].电子设计工程,2014,22(16):35-37.

Realization of UCC/EAN-128 Barcode Computer Programming Based on the Finite State Machine

This paper discussed the application conditions of three character set of UCC/EAN-128 barcode and switch of three encoding models,based on the theory of fnite state machine. It also showed the transformation processing from the information string to encoding string and designed a linked list for storage of encoding strings,which made it convenient to draw barcode patterns and calculate check codes. The module was well applied in the clinical blood management system of the hospital and achieved excellent effectiveness.

hospital information system;clinical blood;UCC/EAN-128 barcode;fnite-state machine;barcode programming

AN Mei-jun1,WANG Shu2
1. Department of Medical Electronics and Information Engineering,Shanghai University of Medicine &Health Sciences,Shanghai 200093,China;2. Department of Information,Shanghai Children’ Hospital,Shanghai 200040,China

TP391.44;R197.324

A

10.3969/j.issn.1674-1633.2016.09.053

1674-1633(2016)09-0168-03

2015-06-02

2016-07-05

上海市教教育委员会科研创新项目(YZ146)。

安美君,高级工程师,主要研究方向为计算机软件、医学信息处理、康复设备控制软件。

通讯作者邮箱:hngdamj@163.com

猜你喜欢
校验码状态机字符串
Basic UDI校验码算法
基于文本挖掘的语词典研究
基于加密设备特征信息的配置数据自动校验方法
基于有限状态机的交会对接飞行任务规划方法
基于Spring StateMachine的有限状态机应用研究
SQL server 2008中的常见的字符串处理函数
倍增法之后缀数组解决重复子串的问题
基于Excel实现书号校验码的验证
身份证号码中的数学
最简单的排序算法(续)