一种农产品生产过程追溯信息编码方法与流程

文档序号:16511259发布日期:2019-01-05 09:21阅读:457来源:国知局
一种农产品生产过程追溯信息编码方法与流程

本发明属于信息技术领域,特别涉及了一种农产品生产过程追溯信息编码方法。



背景技术:

自上世纪七十年代以来,ean、upc等产品编码技术在世界范围内被广泛应用于各类定型包装产品的标识,成为了现代商品流通体系发展中不可或缺的重要组成部分。

与工业产品不同,目前我国农产品的生产过程受限于生产规模和信息化水平,尚未实现全过程信息追溯。近年来,随着物联网技术的发展与普及,农产品生产也正向着集约化、规模化、信息化的方向演进,并且对生产过程信息的查询与追溯提出了更高的要求。

于此同时,随着社会大众对于农产品质量安全问题的关注程度日益提高,消费者对于农产品生产过程中关键信息的可追溯性需求也越来越迫切。

如何通过产品编码技术,将农产品基本信息以及生产过程中产生的过程关键事件信息进行记录,并通过固化形式进行持久化保存,从而便于企业、消费者、行政主管部门进行查询,实现覆盖农产品生产过程全生命周期的追溯与控制,是当下具有研究价值和应用价值的问题。



技术实现要素:

为了解决上述背景技术提出的技术问题,本发明旨在提供一种农产品生产过程追溯信息编码方法,实现农产品生产过程信息的采集、存储和查询。

为了实现上述技术目的,本发明的技术方案为:

一种农产品生产过程追溯信息编码方法,包括以下步骤:

(1)初始化过程,具体步骤如下:

生成一个农产品生产过程追溯信息编码的实例ci,ci中至少包含以下属性:

标准化产品单元spu,其数据类型为字符串,默认值为空;

库存量单位sku,其数据类型为字符串,默认值为空;

产品名称pn,其数据类型为字符串,默认值为空;

批次号bn,其数据类型为字符串,默认值为空;

生产机构mu,其数据类型为字符串,默认值为空;

包装单位pu,其数据类型为字符串,默认值为空;

过程事件pe,由生产过程中所有关键事件信息组成,其数据类型为字符串集合,默认值为空;

(2)基础信息采集过程,具体步骤如下:

根据生产者提供的数据,对实例ci中的属性依次进行以下操作:

更新标准化产品单元spu的值;

更新库存量单位sku的值;

更新产品名称pn的值;

(3)详细信息采集过程,具体步骤如下:

根据生产者提供的数据,对实例ci中的属性依次进行以下操作:

更新批次号bn的值;

更新生产机构mu的值;

更新包装单位pu的值;

(4)事件信息采集过程,具体步骤如下:

根据生产者提供的数据,逐条生成事件记录er,其数据类型为字符串,默认值为空;每一条事件记录er至少由以下键值对构成:

动作action,含义为该事件的抽象动作,其值的数据类型为字符串;

数据data,含义为该事件中的相关采集数据,其值的数据类型为字符串;

类别category,含义为该事件在农产品生产周期中的具体分类阶段,其值的数据类型为字符串;

时间戳timestamp,含义为该事件发生时的具体时间,其值的数据类型为日期时间;

每生成一条事件记录er,将其插入实例ci的过程事件pe中,并更新该实例,直至插入所有事件记录er;

(5)散列过程,具体步骤如下:

对实例ci进行序列化,得到序列si;

调用散列算法计算序列si的散列值,生成散列sh;

将散列sh添加到序列si尾部,生成序列编码sc;

(6)持久化过程,具体步骤如下:

将序列编码sc写入电子标签或二维码标签中。

进一步地,在步骤(4)中,事件的抽象动作包括但不限于购种、育苗、施肥和采摘;事件中的相关采集数据包括但不限于品种、肥料名称和温度湿度;事件在农产品生产周期中的具体分类阶段包括但不限于播种阶段、生长阶段和采摘阶段。

进一步地,在步骤(5)中,采用散列算法计算序列si的散列值后,采用加密算法对散列值进行加密,其结果即为散列sh。

进一步地,所述散列算法包括但不限于md5、sha1;所述加密算法包括但不限于aes、ecc和rsa。

进一步地,在步骤(6)中,所述电子标签的标准包括但不限于rfid、nfc;所述二维码标签的标准包括但不限于qr码、pdf417码。

采用上述技术方案带来的有益效果:

本发明通过编码技术,实现农产品基础信息、详细信息以及生产过程中关键事件信息的采集与持久化存储,促进了农产品生产环节数据的规范性与通用性,有利于农产品生产信息化水平的提高;通过电子标签或二维码标签,对企业、消费者、行政主管部门提供方便快捷的查询手段与方式,能够促进农产品质量控制水平的提升,有利于提高社会各界参与农产品质量安全监督的积极性;通过散列算法和加密算法实现了编码内容的完整性校验,可以有效预防不法分子对于产品标签的伪造、篡改,提高追溯编码内容的隐私性、完整性和抗攻击能力。

附图说明

图1是本发明的基本流程图。

具体实施方式

以下将结合附图,对本发明的技术方案进行详细说明。

农产品生产过程追溯信息编码pc是一个抽象数据类型,可以通过面向对象分析方法(object-orientedanalysis)中的类(class)进行实现,如图1所示。

(1)初始化过程ip。ip一般为pc的构造函数,也可以是以pc为基类的任何继承类的构造函数。ci初始化时至少具有以下属性:

标准化产品单元spu,数据类型为字符串,含义为该产品的spu(standardproductunit)编码,可以为upc、ean、gs1等格式的编码,默认值为空;

库存量单位sku,数据类型为字符串,含义为该产品的sku(stockkeepingunit)编码,格式由生产者自定义,默认值为空;

产品名称pn,数据类型为字符串,含义为该产品的产品名称,默认值为空;

批次号bn,数据类型为字符串,含义为该产品的批次号,格式由生产者自定义,默认值为空;

生产机构mu,数据类型为字符串,含义为该产品的生产机构或委托生产机构名称,默认值为空;

包装单位pu,数据类型为字符串,含义为该产品的包装单位,生产者可以采用数量或重量作为包装单位,默认值为空;

过程事件pe,数据类型为字符串集合,由生产过程中所有关键事件信息组成,默认值为空。

初始化过程ip完成后,ci中的上述属性均被设为默认值,开始执行基础信息采集过程bp。

(2)基础信息采集过程bp。通过生产者提供的数据,更新ci中以下属性的值:标准化产品单元spu,库存量单位sku,产品名称pn。基础信息采集过程bp完成后,ci中上述属性的值被生产者提供的数据更新,开始执行详细信息采集过程dp。

(3)详细信息采集过程dp。通过生产者提供的数据,更新ci中以下属性的值:批次号bn,生产机构mu,包装单位pu。详细信息采集过程dp完成后,ci中上述属性的值被生产者提供的数据更新,开始执行事件信息采集过程ep。

(4)事件信息采集过程ep。通过生产者提供的数据逐条生成事件记录er。其中,er数据类型为字符串,含义为生产过程中的一个关键事件信息,默认值为空。一条事件记录er至少由以下键值对(key-valuepairs)构成,键值对之间以符号“&”进行连接:

动作action,其值(value)的数据类型为字符串,含义为该事件的抽象动作,如购种、育苗、施肥、采摘等;

数据data,其值(value)的数据类型为字符串,含义为该事件中的相关采集数据,如品种、肥料名称、温度湿度等;

类别category,其值(value)的数据类型为字符串,含义为该事件在农产品生产周期中的具体阶段分类,如播种阶段、生长阶段、采摘阶段等;

时间戳timestamp,其值(value)的数据类型为日期时间,含义为该事件发生时的具体时间,精确至秒级。

实例ci的过程事件pe为事件记录er的集合。每生成一条事件记录er后,将该er其插入实例ci的过程事件pe中,并更新该实例。循环执行该过程直至所有生产者提供的数据均被插入。事件信息采集过程ep完成后,ci中的所有属性均被生产者提供的数据更新,开始执行散列过程hp。

(5)散列过程hp。首先调用序列化(serialization)方法将实例ci进行序列化处理,得到序列si。序列si的数据类型为字符串,含义为一维化的实例ci,格式可以是soap(simpleobjectaccessprotocol)、json(javascriptobjectnotation)或其他协议。然后,调用散列算法ha计算序列si的散列值,得到散列sh,数据类型为字符串。散列算法ha的具体步骤如下:使用md5、sha1或其他算法计算序列si的散列值;对得到的散列值使用aes、ecc、rsa或其他加密算法进行加密,其结果即为散列sh,该散列可以用来校验序列si是否被非法篡改。散列算法ha的目的是增加篡改者修改实例ci的时间开销,使其无法在未获取相应算法细节和密钥的条件下伪造序列si。将散列sh添加到序列si尾部,对其进行字符串连接操作,得到序列编码sc,数据类型为字符串。散列过程hp完成后,开始持久化过程rp。

(5)持久化过程rp。根据序列编码sc的内容,通过标签打印机或读写卡器,将其写入电子标签或二维码标签中。电子标签可以为rfid、nfc等标准,二维码标签可以为qr码、pdf417码等标准。

持久化过程rp完成后,生产者可以将得到的标签粘贴或打印至农产品外包装。企业、消费者、行政主管部门可以通过扫描标签的方式获取其中持久化保持的农产品生产过程追溯信息编码pc的实例ci,从而了解该农产品的基础信息、详细信息以及生产过程中关键事件信息,实现覆盖生产过程全生命周期的信息查询与追溯。

下文以一个编码实例来进一步说明本发明。

设实现过程中开发语言为java,集成开发环境为eclipse,将农产品生产过程追溯信息编码pc编写为以下类(class)

当需要生成一个农产品生产过程追溯信息编码pc的实例(instance)ci时,执行初始化过程ip。ip为pc的构造函数,首先生成一个pc的实例ci:

ci=newpc();

ip对于ci中每一个属性进行赋值操作,设为默认值:

ci.spu=””;

ci.sku=””;

ci.pn=””;

ci.bn=””;

ci.mu=””;

ci.pu=””;

ci.pe={“”};

初始化过程ip完成后,开始执行基础信息采集过程bp。

设生产者提供的标准化产品单元spu格式为gtin-13(globaltradeitemnumber),值为“1230056781234”;,库存量单位sku格式为uuid(universallyuniqueidentifier),值为“c1e26952-514e-4a69-bcfd-776774fbe04c”;产品名称pn为“早春红玉”。

bp根据上述数据对于ci中上述属性进行赋值操作:

ci.spu=”1230056781234”;

ci.sku=”c1e26952-514e-4a69-bcfd-776774fbe04c”;

ci.pn=”早春红玉”;

基础信息采集过程bp完成后,开始执行详细信息采集过程dp。

设生产者提供的批次号bn值为“20180314”,生产机构mu值为“第一实验农场”,包装单位pu值为”4个/箱”。

dp根据上述数据对于ci中上述属性进行赋值操作:

ci.bn=”20180314”;

ci.mu=”第一实验农场”;

ci.pu=”4个/箱,10kg”;

详细信息采集过程dp完成后,开始执行事件信息采集过程ep。

设生产者通过田间信息管理系统提供以下5条数据,数据类型为字符串数组(stringarray):

{”2018/2/1,购种,gpd西瓜(2018)310083”,”2018/3/25,育苗,1000株”,”2018/4/1,除虫,pd20121962,10kg”,”2018/5/1,采摘,28℃/30%”,”2018/5/2,装箱,30℃/50%”}

事件信息采集过程ep依次对上述数组中每一元素生成事件记录er,将该er其插入实例ci的过程事件pe中,并更新该实例。其中,er数据类型为字符串(string),其值由以下键值对构成,使用符号”&”进行连接:

er=keyvaluepairs(“action”,动作)+”&”+keyvaluepairs(“data”,数据)+”&”+keyvaluepairs(“category”,类别)+”&”+keyvaluepairs(“timestamp”,时间戳);

事件信息采集过程ep具体如下:

er=keyvaluepairs(“action”,”购种”)+”&”+keyvaluepairs(“data”,“gpd西瓜(2018)310083”)+”&”+keyvaluepairs(“category”,”播种阶段”)+”&”+keyvaluepairs(“timestamp”,”2018-02-0100:00:00”);

ci.ep=ci.ep.add(er);

er=keyvaluepairs(“action”,”育苗”)+”&”+keyvaluepairs(“data”,“1000株”)+”&”+keyvaluepairs(“category”,”播种阶段”)+”&”+keyvaluepairs(“timestamp”,”2018-03-2500:00:00”);

ci.ep=ci.ep.add(er);

er=keyvaluepairs(“action”,”除虫”)+”&”+keyvaluepairs(“data”,“pd20121962,10kg”)+”&”+keyvaluepairs(“category”,”生长阶段”)+”&”+keyvaluepairs(“timestamp”,”2018-04-0100:00:00”);

ci.ep=ci.ep.add(er);

er=keyvaluepairs(“action”,”采摘”)+”&”+keyvaluepairs(“data”,“28℃/30%”)+”&”+keyvaluepairs(“category”,”采摘阶段”)+”&”+keyvaluepairs(“timestamp”,”2018-05-0100:00:00”);

ci.ep=ci.ep.add(er);

er=keyvaluepairs(“action”,”装箱”)+”&”+keyvaluepairs(“data”,“30℃/50%”)+”&”+keyvaluepairs(“category”,”采摘阶段”)+”&”+keyvaluepairs(“timestamp”,”2018-05-0200:00:00”);

ci.ep=ci.ep.add(er);

事件信息采集过程ep完成后,开始执行散列过程hp。

散列过程hp首先调用序列化(serialization)方法将实例ci进行序列化处理,设序列化方法为json(javascriptobjectnotation),得到序列si的值如下所示:

{

“spu”:”1230056781234”,

“sku”:”c1e26952-514e-4a69-bcfd-776774fbe04c”,

“pn”:”早春红玉”,

“bn”:”20180314”,

“mu”:”第一实验农场”,

“pu”:”4个/箱,10kg”,

“pe”:[

{

“action=购种&data=gpd西瓜(2018)310083&category=播种阶段&timestamp=2018-02-0100:00:00”

},

{

“action=育苗&data=1000株&category=播种阶段&timestamp=2018-03-2500:00:00”},

{“action=除虫&data=pd20121962,10kg&category=生长阶段&timestamp=2018-04-0100:00:00”},

{action=采摘&data=28℃/30%&category=采摘阶段&timestamp=2018-05-0100:00:00”},

{action=装箱&data=30℃/50%&category=采摘阶段&timestamp=2018-05-0200:00:00”}

]

}

然后,调用散列算法ha计算序列si的散列值。散列算法ha的具体步骤如下:使用md5算法计算序列si的散列值,得到散列值为”b23bbd5b74f3376c0f58f46a48b3d991”;对得到的上述散列值使用aes算法进行加密,其中块大小为64位,密钥长度为256位,加密方式为cbc(cipherblockchaining),密钥由ca(certificateauthority)系统提供,加密结果使用hex(十六进制)方式解码(decoding)为字符串,作为散列sh。

当需要校验实例ci是否被人为篡改时,可分别使用md5算法计算序列si的散列值,并同时使用密钥解密散列sh,然后对其结果进行比较。若结果相同,则证明实例ci中所有属性均为原始数据,未受到篡改,真实可信;若结果不同,则证明实例ci中部分属性已发生篡改,其数据真实信无法保证。由于散列算法ha中加密过程的密钥不对攻击者公开,因此攻击者难以通过唯密文破解的方法绕过该过程对序列si的值进行攻击。

将散列sh添加到序列si尾部,对其进行字符串连接操作,得到序列编码sc,数据类型为字符串。散列过程hp完成后,开始持久化过程rp。

持久化过程rp根据序列编码sc的内容将其作为标准ascii编码通过标签打印机或写入二维码标签中。设标签编码为pdf417码,标签类型为自粘型热转印标签。

上述标签打印完成后,粘贴至该农产品外包装表面。

厂家、消费者、行政主管部门可通过电眼传感器、码枪或手机摄像头扫描该农产品外包装上的标签,从而获得实例ci中相应属性的值,了解农产品基本信息、详细信息以及在生产环节中的过程关键事件信息。

实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1