做车辆仓储台账时,客户日常沟通只报车架号后 6 位,系统当然要支持按后 6 位查车。问题出在另一种情况:用户输入了完整的 17 位车架号,库里没有完全一样的,系统「聪明地」退回按后 6 位匹配,找到了一辆尾号相同的车。
结果是差点把另一位客户的车出了库。
规则只有两条
- 给了完整编号,就只做精确匹配。 对不上就明确说「未找到,未做模糊匹配」,把库里同尾号的车列出来给人看,但绝不认作其一。
- 只给后几位时,若有多辆撞号,必须把候选全部列出让人选。 不许自动选第一辆。
模糊匹配只能用来放宽「库里信息不全」的情况,不能用来放宽「用户给的对不上」的情况。前者是帮人,后者是替人做决定。
测试数据要故意撞号
这类 bug 在干净的测试数据里永远测不出来,因为 60 辆车尾号都不同。我们的演示数据里故意放了两组尾号相同的车,验收时逐条走:完整编号不匹配要报未找到,尾号撞号要弹候选。
顺便一句:匹配规则只准有一份实现
搜索框一套规则、下指令时另一套规则,是这类错误的温床。整个系统里「根据编号找记录」只能有一个函数,所有入口都调它。

