Skip to main content

Customer Reference Rule

文档版本:v1.0
更新日期:2026-04-02
适用范围:AOVIS / NEXA 独立站前台账户、客服查询、后台客户详情

1. 目标

customer reference 是一个面向用户、客服和后台运营的可读客户编号。

它的设计目标是:

  • 简短
  • 易读
  • 便于口头沟通和人工检索
  • 不暴露数据库真实主键
  • 不暴露客户总量或月度新增量
  • 一次生成后永久不变

2. 不承担的职责

customer reference 不是:

  • 数据库主键
  • 订单编号
  • 财务编号
  • 市场来源编号
  • 国家归属编号

这些信息应由各自独立字段承担,不应混入客户编号本身。

3. 格式规则

格式:

YYMM-RAND4

示例:

2604-K7M2
2604-T9Q4
2604-BX6R

含义:

  • YYMM:用户创建时间的 UTC 年月,例如 2604
  • RAND4:4 位随机字符码

4. 随机码规则

4.1 字符集

随机码使用去歧义字符集:

ABCDEFGHJKLMNPQRSTUVWXYZ23456789

排除字符:

  • I
  • L
  • O
  • 0
  • 1

目的:

  • 避免客服口头报号时读错
  • 避免用户截图或电话中混淆

4.2 容量

4 位码容量为:

32^4 = 1,048,576

已远高于 9999,且不会像顺序号那样泄露客户数量。

5. 敏感组合过滤原则

随机码生成时必须经过过滤,避免出现:

  • 侮辱性词语
  • 脏词
  • 性暗示词语
  • 容易引发歧义或不适的缩写
  • 全重复字符等低质量组合

命中过滤规则时,必须重新生成。

5.1 当前实现要求

至少过滤以下类别:

  • 常见英文脏词
  • 常见侮辱词根
  • 明显不适合客服口播的组合
  • 全重复字符,如 AAAA2222

5.2 后续维护要求

blacklist 必须维护在代码中可扩展的集中位置,后续可按市场反馈继续补充。

6. 生成与存储规则

  • customerReference 为数据库持久字段
  • 在用户首次需要该编号时生成
  • 生成后写入数据库
  • 后续永久不变
  • 依赖数据库唯一约束确保不重复
  • 如遇碰撞,自动重试生成

7. 当前使用位置

当前编号应至少用于:

  • 用户前台 /account/profile
  • 后台 /admin/customers/[id]
  • 客服支持和人工查号场景

8. 与系统内部 ID 的关系

  • 系统内部继续使用 User.id 作为技术主键
  • 用户和客服使用 customerReference

两者职责不同,不应混用。