先说结论:库位码最后,必须多留一位做校验位。这个坑我见过三次,三次都是同一个结局:货没丢,系统里却找不到。加一位校验位的成本几乎为零,能把这类"失踪"案拦掉绝大多数。

先讲最近的一个项目。今年年中,华东一家做汽配的客户,新仓2万多平方米,上线三个月后第一次大盘,对不上账的货值超过200万。不是被偷,也不是发错货,是40多托货被上到了错误的库位。库位码B-12-03-4,被看成了B-12-08-4:叉车司机扫码时条码有点脏,读不出来,改手工输入,3和8就这么错了。WMS里这40托"在"B-12-03-4,实际"在"B-12-08-4。整整两周,销售在系统里看到有货,拣选员在现场找不到货,客服被客户骂,仓库被销售骂。最后是两个人翻了5天库位,一个一个找出来的。200万货值"失踪"两周,就因为一位数字看错了。

第二个项目更憋屈。2024年初,华南一个3PL仓,库位标签换了家便宜的供应商,模板边距没调好,打印出来的标签最右边被切掉2毫米——正好是校验位那一位。一半的标签扫出来是残码,现场只能手工输入,没有校验位兜底,错位率直接起飞。省下来的标签钱,还不够找一托货的人工。这两个项目,一个错在"人看错了",一个错在"标签印坏了",但病根是同一个:编码设计里没有给错误留一个被发现的机会。

校验位是怎么把错拦下来的

原理一句话:给编码加一个"自带答案的尾巴",让系统能自己验算。

比如库位码B12034(去掉分隔符后的数字部分),我们在WMS里用卢恩算法(信用卡号用的就是这个算法)给它算出一位校验位,变成B12034-7。以后不管是扫码还是手工输入,系统先验算:前几位能不能算出最后这个7?算不出来,直接报错,货根本上不了错架。

算法不神秘,我一步步算给你看,每一步你都能复算。假设库位数字部分是417203:

  1. 末尾先补一个0占位,变成4172030
  2. 从右往左,把第2、4、6位上的数字翻倍:3变成6,2变成4,1变成2(翻倍超过9的,把十位个位相加,比如8乘2得16,就取1加6得7)
  3. 全部加起来:0加6加0加4加7加2加4,等于23
  4. 校验位等于10减去23除以10的余数,也就是10减3,等于7

所以完整库位码是4172037。司机把417203错输成417208,系统验算4172087,末位对不上7,当场红字报错。这就是全部魔法:一位数字,让"错了"这件事变得可被发现。

员工手持PDA在货架前扫码确认库位

算法选哪个?别自己发明,看这张表:

| 算法 | 怎么算 | 拦得住什么错 | 短板 | | 卢恩算法 | 隔位翻倍再求和取模 | 单数字输错、多数相邻换位 | 要系统支持验算逻辑 | | 加权求和 | 每位乘固定权重再取模 | 单数字输错 | 权重配错等于白配 | | GS1校验规则 | 奇偶位分别乘3和1 | 单数字输错 | 本是商品条码的规则,借用到库位码要全仓统一口径 |

我的判断:库位码直接用卢恩算法,别自创。"自创校验规则"这个坑我见过三次,每次都是换了实施顾问之后,发现新团队根本复算不出老规则,最后只能全仓重打标签。

在WMS里把它配起来:四步,一步都不能省

  1. 先定编码规则,再打标签。规则写死三句话:库位码等于区-排-层-位加1位校验位;分隔符只做显示,不参与计算;校验位永远是最后一位。顺序反了(先打标签后定规则)必返工,这个我见过三次。
  2. 在WMS的库位主数据里加两个字段:校验位、校验算法名。别把校验位只印在标签上,系统里要有地方存、有地方配,否则换标签供应商那天就是灾难日。
  3. 三个环节开强制校验:上架、移库、盘点补录。扫码或手工输入库位码时必验算,失败直接拦截并记日志。只在上架环节开等于没开——我经手的错位,大多数发生在移库和盘点补录。
  4. 历史库位批量生成:老库位码用脚本一次性算出校验位,统一重打标签。别让现场一个一个手算,3万个库位的新仓,我都是上线前一晚跑脚本批量过的。

这里有个取舍要想清楚:强制拦截还是只告警?强制拦截会拖慢作业节拍,报错一次,司机就要停下来确认;只告警则没人看,等于没配。我的做法是分环节:上架和移库强制拦截(错一次的代价是整托货失踪),盘点补录用告警加事后复核(盘点时效优先,错了当天能发现)。一刀切两种都错。

上线前夜checklist:五条有一条没过,就别上线

  1. 标签打印有没有被截断?校验位在最后一位,标签纸窄了、模板边距错了,打印出来最后一位被切掉一半,扫不出来。拿10张标签逐张扫,别抽样。
  2. PDA输入法锁死了吗?安卓PDA有的默认中文输入法,全角数字和半角数字在系统里是两个东西,校验全错。上线前把每台PDA的默认输入法锁成英文半角,一台一台查。
  3. 纯数字码做防误读设计了吗?0和O、1和I、5和S,人站在高处看标签最容易混。我的做法:库位码只用数字,字体用等宽且0中间带斜线的那款,标签上0和O永不同时出现。
  4. 拦截日志有人看吗?拦下来没人复盘等于白拦。上线第一周每天导出拦截记录,看是真错还是规则配错了,第二周再放开。
  5. 老库位码的校验位补齐了吗?新旧码混用是灾难,要么全补,要么全换,别留"老编码例外"这种后门。

反常识:错的从来不是员工

我做了30多个上线项目,出这种错的仓,管理层第一反应永远是"加强培训""出错扣钱"。但人眼看一长串数字,看错是再正常不过的事,靠"仔细"解决不了,靠扣钱更解决不了。你只有两个选择:要么承认人一定会错,让系统去拦;要么指望人不错,然后每个月花几天时间找"失踪"的货。前者的成本是一位数字,后者是200万的账对不上。这笔账,不用我帮你算了吧。

明天就能动手的事:今晚就去你们WMS的库位主数据里看一眼,有没有校验位字段。没有的话,把上面那份五条checklist打印出来贴墙上,下次上线前照着走一遍。

作者:林晓|WMS实施顾问,做过30+上线项目