3. 实验室内条码标识体系设计

实验室条码标识体系的核心目标只有一句话:让任何一个样本、任何一支试剂、任何一块板,在实验室的任意环节、任意系统中,都能被唯一、无歧义地识别。要做到这一点,条码不能只是"贴上去的一串数字",而必须是一套有规则、有层级、有校验、有映射的编码工程。本节围绕唯一标识规则、批次与序列号、校验位、载体层级关系和跨系统映射表五个要素展开,并给出可落地的工程约束。

一、唯一标识规则:从"能扫"到"扫不错"

唯一标识(Unique Identifier,UID)是条码体系的根。设计时先确定编码的字符集与长度。实验室场景推荐使用大写字母加数字的 36 进制字符集(0-9、A-Z),避免使用易混淆字符 I、O、Z、S 与 1、0、2、5 混读。若使用 Code 128 码制,可支持全 ASCII;若使用 Data Matrix 二维码,则更适合小尺寸样本管。

一个可用的 UID 结构建议为:实验室代码(3位)+ 对象类型(2位)+ 年份(2位)+ 流水号(8位)+ 校验位(1位),总长 16 位。例如 LAB-SM-25-00001234-7。其中对象类型用两位字母区分:SM 表示样本(Sample)、RG 表示试剂(Reagent)、PL 表示板(Plate)、IN 表示仪器(Instrument)。流水号按对象类型独立递增,避免不同对象类型之间互相占用号段。

工程约束一:UID 一旦分配,永不复用。即使样本被销毁、试剂被耗尽,其 UID 也必须保留在数据库中并标记为"已注销",而不是回收给新对象。这是避免重码最根本的一条纪律。工程约束二:UID 不携带可变语义。不要把样本浓度、实验日期、操作人等信息编进 UID,否则一旦信息变更,条码就失效。可变信息应通过映射表关联,而不是硬编码进条码本身。

二、批次与序列号:两级粒度的分工

批次号(Lot/Batch)和序列号(Serial Number)解决的是不同粒度的问题。批次号标识"同一批生产或同一批配制的对象集合",序列号标识"批次内的单个对象"。对于试剂,批次号通常由厂商提供,实验室应原样保留并录入系统;对于自配试剂,实验室需自行生成批次号,建议格式为 YYYYMMDD-配制人缩写-序号,例如 20250315-ZH-01。

对于样本,批次号可以对应"一次采集批次"或"一次上机批次",序列号则对应单管样本。这里有一个常见误区:把批次号当作唯一标识使用。批次号只能定位到一组对象,不能定位到单个对象。当同一批次内出现一支异常样本时,仅靠批次号无法追溯,必须依赖序列号。因此,凡是需要单管追溯的场景,条码中必须包含序列号或可映射到序列号的 UID。

三、校验位:让扫描错误在录入前暴露

校验位是条码体系中最容易被忽视、却最能降低数据错误率的一环。没有校验位时,一个字符的误读会直接进入数据库,造成"张冠李戴";有校验位时,系统可以在录入前就拒绝错误码。

推荐使用 Mod 36 校验,与 36 进制字符集匹配。计算步骤如下:将 UID 前 15 位字符映射为数值(0-9 对应 0-9,A-Z 对应 10-35),从右向左依次乘以权重 1、2、3……循环,求和后对 36 取模,再用 36 减去余数,若结果为 36 则取 0,最后映射回字符。以 LABSM2500001234 为例,计算得到校验字符为 7,完整 UID 为 LABSM25000012347。实际工程中,校验位由系统自动生成,人工只需核对扫描结果是否被系统接受。

校验位只能发现错误,不能纠正错误。它的价值在于把"错误数据进入数据库"变成"错误数据在扫描端被拦截",从而把纠错成本从下游回溯前移到上游录入。

四、载体层级关系:从管到板到箱

实验室中的条码载体不是孤立的,而是存在明确的层级关系。典型层级为:单管(Tube)→ 板/架(Rack/Plate)→ 箱/批次(Box/Batch)→ 存储位置(Location)。每一层都有自己的条码,且下层条码与上层条码之间必须建立父子关联。

例如,一块 96 孔板 PL-25-00000042 上放置了 96 支样本管,系统需要记录"哪支管在哪个孔位"。孔位本身可以用 A01-H12 表示,与板条码组合后形成"板 UID + 孔位"的复合定位。当板被放入冰箱位置 FRZ-02-S3 时,系统再建立"板 UID → 位置 UID"的关联。这样,任何一支管都可以通过"管 UID → 板 UID → 位置 UID"三级链路被定位。

工程约束三:层级关系必须显式存储,不能靠命名规则隐式推断。例如,不能因为管条码以 PL-25-00000042 开头就认为它属于该板,而应在数据库中建立独立的关联表。命名规则可以辅助人工识别,但不能作为系统判断的唯一依据。

五、跨系统映射表:让不同系统说同一种语言

实验室通常同时运行 LIMS、ELN、酶标仪软件、存储管理系统等多个系统。每个系统可能使用不同的内部 ID,但对外都应映射到同一个 UID。跨系统映射表就是解决这一问题的核心工具。

映射表至少应包含以下字段:UID、系统名称、系统内 ID、对象类型、批次号、序列号、创建时间、状态。当样本从 LIMS 进入酶标仪软件时,酶标仪读取的是 UID,软件通过映射表找到自己的内部 ID,从而完成数据关联。当结果回传时,再通过 UID 反向映射回 LIMS。

工程约束四:映射表以 UID 为主键,系统内 ID 为从属字段。任何系统内 ID 的变更都不应影响 UID 的稳定性。工程约束五:映射表必须支持一对多,即一个 UID 可以对应多个系统的内部 ID,但一个系统内 ID 只能对应一个 UID,避免反向歧义。

实验室条码标识体系:UID 结构与层级映射 UID 结构(16位) 实验室代码 对象类型 年份 流水号(8位) 校验位 示例:LAB-SM-25-00001234-7 载体层级关系 单管 Tube UID + 孔位 板/架 Plate PL-25-00000042 箱/批次 Box 20250315-ZH-01 存储位置 FRZ-02-S3 跨系统映射表(以 UID 为主键) UID 系统名称 系统内 ID 对象类型 状态 LAB-SM-25-00001234-7 LIMS S-2025-1234 样本 在用 LAB-SM-25-00001234-7 酶标仪软件 W-0088 样本 在用 LAB-RG-25-00000056-3 LIMS R-2025-0056 试剂 已耗尽 LAB-PL-25-00000042-9 存储管理系统 B-042 板 在用

六、避免重码与歧义的工程约束汇总

把上述设计落到工程上,需要形成几条可检查的约束。第一,UID 全局唯一且永不复用,注销对象保留记录。第二,条码字符集排除易混淆字符,并在扫描端做字符白名单校验。第三,校验位必须参与录入校验,任何未通过校验的扫描结果不得写入数据库。第四,层级关系显式存储,不依赖命名规则推断。第五,映射表以 UID 为主键,系统内 ID 变更不影响 UID。第六,所有条码打印前必须经过唯一性检查,在数据库中对 UID 做唯一索引,重复即拒绝打印。

最后给出一个可直接使用的检查清单,用于条码体系上线前的自检:

检查项判断标准不通过时的处理
UID 唯一性数据库中 UID 字段有唯一索引,无重复记录清理重复记录,重建索引
字符集合规条码中不含 I、O、Z、S 等易混字符重新生成条码,替换打印模板
校验位生效扫描错误码时系统拒绝录入检查校验算法与扫描端校验逻辑
层级关联完整每支管都能通过关联表找到所属板和位置补录关联关系,禁止手工推断
映射表主键UID 为主键,系统内 ID 为普通字段调整表结构,迁移历史数据
打印前查重重复 UID 无法生成打印任务在打印服务中加入唯一性校验

这套体系的价值不在于条码本身有多复杂,而在于它把"识别"这件事从依赖人的记忆和细心,转变为依赖规则和系统校验。当 UID、批次、序列号、校验位、层级关系和映射表六个要素都到位时,实验室里的每一支管、每一块板、每一瓶试剂,都能在任意系统中被准确找到,重码和歧义也就失去了生存空间。