香烟标记。标记代码的结构

在本文中,我将尝试阐明香烟标签的技术部分和组成。

Habr读者请原谅我的简短评论。



什么是香烟标签?



贴有标签的香烟是在消费者包装上的香烟,其识别方法应遵循第381-FZ号法律的要求以及根据该法律通过的俄罗斯联邦政府的法规性法律。

因此,为了识别带有标签的商品,必须满足以下条件:



  1. 货物必须标有识别手段(标记代码)
  2. 信息监视系统应包含有关在香烟上应用识别手段的信息(由香烟制造商完成)
  3. 信息监控系统必须包含有关商品的可靠信息


我们提醒您,信息监视系统中是否存在有关香烟流通的信息,并不是识别带有标签的产品的条件。

对于那些在2020年7月1日之前购买纸质标签香烟的买家,无需担心并将剩余的东西提交到某个地方。制造商在2020年7月1日之前投入流通的卷烟在监控系统中被注册为“暂时无法追踪”,并且根据本规则,允许其进一步流通。



必须记住,在制造商的实验期内(2018-07.2019),标签的组成发生了变化。卷烟制造商已与CRPT运营商合作寻找可接受的解决方案。在此过渡期间生产的所有标记产品也都被标记。



让我们看一下今天生效的香烟标记代码的结构。

顺便说一下,它是某些欧洲国家/地区的卷烟标记代码的副本。因此,对于跨国公司而言,标签已成为超越俄罗斯制造商的竞争优势。



80个字符用于编码香烟和MRP(最高零售价)的序列号:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!”%&’*+-./_,:;=<>?
MRC的编码-解码算法基于使用以下字母的将科比中MRC的大小转换为80进制数字系统:编码字母



编码编码

过程

  1. 例如,我们将MRC转换为戈比
  2. 我们找到整数部分以及将MRC除以数字系统的基数的余数(在我们的示例中为80)
  3. 我们从字母表中取一个等于余数的索引字符,并将其写入结果字符串的开头
  4. 2 3 0
  5. 4 0 (“A”)
= 146 30, = 14630


  1. 14630 80: 182 70
  2. 70 : “.”
  3. 0, 182 80: 2 22
  4. 22 : “W.”
  5. 0, 2 80: 0 2
  6. 2 : “CW.”
  7. 0, : “ACW.”










  1. , 80, , , 0,
“ACW.”


0.



1. : “A”2. “A”: 03. 80 3 ( , 4 ) 0, 04. 0 : 05. : “C”6. “C”: 27. 80 2 2, 128008. 12800 : 128009. : “W”10. “W”: 2211. 80 1 22, 176012. 1760 : 1456013. : “.”14. “.”: 7015. 80 0 70, 7016. 70 : 1463017. = 14360 14630


mrp encoder on ++
using System;
using System.Text;

namespace SharedUtil.Mrp
{
    public static class MrpEncoder
    {
        public const string Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"%&\'*+-./_,:;=<>?";

        public static string Encode(uint value, byte paddingLength = 4)
        {
            var builder = new StringBuilder();
            long result = value;
            do
            {
                long rmdr;
                result = Math.DivRem(result, Alphabet.Length, out rmdr);
                builder.Insert(0, Alphabet[(int) rmdr]);
            } while (result > 0);

            return builder.ToString().PadLeft(paddingLength, Alphabet[0]);
        }

        public static uint Decode(string value)
        {
            uint result = 0;
            for (int i = 0; i < value.Length; i++)
            {
                var characterIndex = Alphabet.IndexOf(value[i]);
                if (characterIndex < 0)
                {
                    throw new ArgumentException(string.Format("Invalid character: '{0}'", value[i]));
                }
                result += (uint) (Math.Pow(Alphabet.Length, value.Length - 1 - i) * characterIndex);
            }

            return result;
        }
    }
}
由于实际上MRC(最高零售价)四舍五入为卢布,范围在60到500卢布之间,因此我们可以得出结论:80进制编码的MRC始终以“ A”开头,以四个字符“ A”,“ U“,” o,“ 8”。您可以使用它来检查包装标记代码中MRC的有效性。



MRC编码表。


让我们考虑使用“ T&W”过滤器在香烟示例上的标记ORIGINAL COMPACT MRC 106“



这就是包装和块上的标记的样子:

包装和包装上的香烟标签很抱歉,我没有找到带有MRC 106的块,我用了115的照片。包装



标记:

DataMatrix捆绑包

04610030141527 00000Hd AB0o OnE1



一串29个字符,包含:

  • GTIN-14 (14 ). «0» EAN-13 «» . EAN-13, .
  • (7 ) . ,   80 .     EAN.
  • (4 ). , 80- .
  • (4 ). « » . . , , .
GTIN-14 (14 ). «0» EAN-13 «» . EAN-13, .
« » GTIN EAN13.




块标记:

DataMatrix块可读的标记代码副本

(01)04610030141534 (21)00000!& <FNC1> (8005)106000 <FNC1> (93)yikZ



至少41个字符的字符串,包含GS1格式的代码。为了清楚起见,添加了括号。包含GS1 <FNC1>符号

  • (01)GTIN-14(14个数字字符)。包含计量单位“块”的前导“ 0”和EAN-13代码。类似于通常的EAN-13印刷在模块上。
  • (21)序列号(7个字符)。制造商生成的识别码,由80个字符组成。对指定的GTIN-14而言是唯一的。
  • (8005)(6个数字字符)。块的最高零售价格为科比。在我们的示例中,每块1060.00卢布(每包106卢布)
  • (93) (4 ). « » . .
代码中可能包含其他数据,但代码01和21应该排在最前面



标记:

包装盒标记为GS1-CODE128

(01)14610030141524 (21)0011986 <FNC1> (8005)106000 <FNC1> (37)50



至少25个字符的字符串。包含GS1格式的强制性代码01和21。每个制造商自己确定运输包装的标记代码的组成。没有加密的尾巴。可以用作GS-1 DataMatrix代码。

制造商通常会复制GS-1(CODE-128)和GS-1 DataMatrix,这是一个示例:

其他制造商有时不指示MRC,而某些制造商会添加元素240来指示制造商的内部命名法。

让我们看一下标记运输包“ box”的代码示例:
  • (01) GTIN-14 (14 ). IFT-14 «». IFT-14, .
  • (21) (7 ). , IFT-14 .
  • (8005) (6 ). , – «».
  • (37)  (2 ). .
代码中可以包含其他数据,但代码01和21应该排在最前面托盘



标记:

托盘标记

(00)94610030141 0004634



20个字符的字符串。包含前缀00和强制性托盘(容器)物流代码SSCC。



除包装外,所有包装均带有机器可读的代码和人类可读的等效代码。如果由于某种原因扫描仪未扫描标记代码,这使您可以手动拨打标记代码。



聚合和分类。

标签系统具有包装的集合和分解等功能,直到最近才在工厂进行汇总。从工厂开始,不仅将有关所应用标记代码的信息,而且还将其汇总信息传输到系统。从工厂传输到BMS的JSON文件包含一种结构,其中没有工厂聚集数据就无法发送标记数据。在工厂中,通过重新扫描每个嵌套元素和包装代码中的标签来执行块/盒/托盘的汇总。这样可以确保代码可读性保证正确的汇总,即包装中包含的代码与包装本身的代码是否一致。

因此,请尽量保留原始包装直到最后一刻。打开工厂包装盒后,将无法再保证所有块都属于该特定包装盒。您好,所有为此检查嵌套块并打开工厂包装盒的零售链;)



最近,香烟聚合功能出现在贸易组织的API中。我们在这里看到从物流仓库运送托盘的广阔前景。



一旦包装中包含的单元被用于处置或所有权变更文件中,就会自动进行分类。换句话说,如果您卖出一包香烟,则会将其所在的烟盒自动分解为几包,并将此烟盒所在的盒子分解为几盒等。将不可能使用进一步分类的块,箱,托盘代码。这是一个非常优雅的解决方案。今天,仅当嵌套单元在当前所有者的一侧处置时,才对盒/块进行分解。如果第三方交易对手试图从包装盒中出售您的香烟,这不会导致其自动分类,因为根据GIS MT的说法,交易对手在提交处置信息时扫描标签时不是所有者。



, , , ,



(14 ) (7 ) (4 )



: 00000046198532%J_zMZ401er

(14 ) (7 )



: 00000046214805ltCeK2L



01 (14 ) 21 (7 ) 8005 (6 )



: (01)04600266012586(21)E'd8ZnM(8005)100000

: 010460026601258621E'd8ZnM8005100000

01 (14 ) 21(7



: (01)04600266012586(21)E'd8ZnM

: 010460026601258621E'd8ZnM

: 1+2+3

• 1

01 (14 )

02 , (14 )

• 2

11 (6 )

13 (6 )

• 3

21 ( 20 )

:

02046002660125991302071921E'd8ZnMZx



01046002660125861101071921E'd8ZnM

货盘,集装箱:

串行运输包装代码,SSCC(20个字符)(标准GS1-128,用应用程序ID AI(00)表示)

示例:00177102981700000049

请注意:在示例中,没有在任何地方使用符号“ FNC1”(代码29)。当替换为FRT时将其切除。



为提交信息而生成的UPD文件必须在其名称上带有标记符号-“ MARK”



PDF:用于注册UPD / UPDi / UKD的官方方法学建议;



EUPD示例:



XML。来自Megapolis的EPD示例。



XML。使用不同包装类型的EPD样品。



XML。发票说明样本。






All Articles