3. 序列号编码规则与载体解析
在DataMan防错与质量追溯项目中,读码器读到的“字符串”本身并不等于可用的追溯信息。真正决定防错能力的,是序列号背后的编码规则,以及承载它的码制结构。同一串字符,如果客户规则里第9位是校验位、第10~11位是批次码,而现场却按“第9位是日期”去解析,那么即使读码率100%,追溯结果依然是错的。本节要解决的就是:看懂一维码、二维码、DMC、QR的编码结构,理解校验位、批次码、日期码的防错逻辑,并能把客户实际序列号规则拆解成可配置、可校验的字段。
一、四种载体的结构差异
一维码(Code 128、Code 39等)本质是“线性条空序列”,信息容量小,通常只承载一串字符,没有内建纠错,靠校验位(如Code 128的模103校验)保证读取正确性。二维码则不同:Data Matrix(DMC)和QR都属于二维矩阵码,具备纠错能力,DMC常用ECC200,QR分L/M/Q/H四级纠错。DMC在工业零件上应用最广,因为它尺寸小、对比度容忍度高、支持金属雕刻和激光打标;QR则更多出现在包装、说明书和物流标签上。
关键区别在于:一维码的“校验”是字符级校验,二维码的“校验”是符号级纠错加数据校验。DataMan读码器在解码时,会先做符号纠错,再输出数据字符串。因此,当DMC出现局部污损时,读码器可能仍能输出正确字符串,但一维码一旦条空模糊,往往直接读不到或读出错误字符。理解这一点,才能判断“读不到”和“读错”是两类不同问题。
二、校验位、批次码、日期码的防错逻辑
校验位是序列号防错的第一道闸门。以常见的模10加权校验为例:假设序列号前11位为“AB240315001”,取数字部分“240315001”,从右往左按权重1、3交替相乘,求和后取个位,再用10减去个位得到校验位。若求和个位为0,则校验位为0。这个计算过程可以写成DataMan的正则表达式或脚本校验,读码器在输出前先判断校验位是否匹配,不匹配则触发NG信号。
批次码和日期码的防错逻辑不同。日期码通常嵌入生产日期,如“240315”表示2024年3月15日。防错要点是:读码器不仅要读出日期,还要与MES下发的工单日期比对,若日期超出允许范围(例如提前或滞后超过1天),则判定为错料或混料。批次码则用于区分同一工单下的不同生产批次,常见格式为字母+数字,如“B01”。防错逻辑是:同一工单内批次码应连续或按规则递增,若出现跳变或重复,说明可能混入了其他批次的产品。
示例:某客户序列号规则拆解
规则:SN + YYMMDD + 批次码(2位) + 流水号(4位) + 校验位(1位),总长17位。
示例:SN240315B0100127
拆解:前缀“SN”固定;日期“240315”;批次“B01”;流水“0012”;校验位“7”。
校验计算:取数字部分“240315010012”,从右往左权重1、3交替,求和后取个位,10减个位得校验位。若结果与第17位不符,则NG。
三、客户实际序列号规则的拆解练习
拿到客户规则后,不要急着写正则。先做三件事:第一,确认总长度是否固定,若变长则要找出分隔符或长度字段;第二,逐段标注字段含义,区分固定前缀、日期、批次、流水、校验;第三,确认校验算法,是模10、模11还是模36,权重方向是从左还是从右。这三步做完,再写正则表达式。
以DataMan 380为例,在DataMan Setup Tool中进入“符号体系”设置,选择对应的码制(如Data Matrix),在“数据格式化”中启用“验证”功能,输入正则表达式。例如上述规则可写为:^SN\d{6}[A-Z]\d{2}\d{4}\d$。但正则只能校验格式,不能校验校验位。要校验校验位,需使用DataMan的“脚本”功能或“格式化”中的“校验和”选项,将校验位计算逻辑写入。
实际操作中,建议先用DataMan的“实时视图”读取一批已知正确的序列号,观察输出字符串是否与规则一致。然后故意修改一位数字,看读码器是否触发NG。若未触发,说明校验逻辑未生效或正则写错。这个“正反验证”过程是防错配置的必经步骤。
拆解练习建议:让学员拿3个客户实际序列号样本,按“定长判断→字段切分→校验位定位→正则编写”四步完成拆解,并在DataMan中配置验证。重点检查:日期码是否与工单匹配、批次码是否连续、校验位是否计算正确。
四、常见错误与判断依据
最常见的错误是把“读得到”当成“读得对”。DataMan读码器输出字符串后,若未配置验证,任何字符串都会直接上传MES。因此,防错配置的核心不是提高读码率,而是增加“验证层”。验证层包括:格式验证(正则)、校验位验证(模运算)、业务验证(日期/批次比对)。三层都通过,才允许放行。
另一个常见错误是忽略码制本身的校验。例如Code 128自带模103校验,但DataMan默认可能不输出校验位,只输出数据部分。若客户规则中的校验位是“业务校验位”,与码制校验位是两回事,不能混淆。判断依据是:码制校验位由读码器内部处理,业务校验位由客户规则定义,需要在数据格式化中单独计算。
最后,日期码的防错要特别注意跨年、跨月、闰年等边界情况。例如“240229”是合法日期,“230229”则不是。若客户规则允许日期码,建议在验证脚本中加入日期合法性判断,避免因日期错误导致追溯数据污染。