合普知识库
柔彩主题三 · 更轻盈的阅读体验

短唯一标识生成方法 实用操作步骤与避坑指南

发布时间:2025-12-14 09:14:41 阅读:256 次

短唯一标识的常见用途

在开发网页应用或设计系统时,经常需要给每个对象分配一个唯一的“身份证”。比如生成短链接、订单编号、邀请码,甚至游戏里的道具ID。长串的UUID虽然唯一,但太占空间,还容易输错。这时候,“短唯一标识”就成了更实用的选择。

几种实用的生成方案

最简单的办法是用时间戳加随机数。JavaScript里一行代码就能搞定:

Math.random().toString(36).substr(2, 9)

这行代码把一个随机数转成36进制(包含0-9和a-z),再截取小数点后的9位。结果像 1a2b3c4d5 这样的字符串,长度短,看起来也干净。

如果对冲突概率比较敏感,可以结合时间戳提升唯一性:

(Date.now().toString(36) + Math.random().toString(36).substr(2, 5))

这样生成的ID前段是毫秒级时间戳,后段补随机字符,基本能避免同一毫秒内重复的问题。

使用Nano ID库

在项目中追求稳定的话,推荐直接用现成的工具库,比如 Nano ID。它比原生方法更安全,还能自定义字符集和长度。

<script src="https://cdn.jsdelivr.net/npm/nanoid/nanoid.js"></script>
<script>
const id = nanoid(8); // 生成8位ID
console.log(id); // 输出类似 "fXG3z1k9"
</script>

Nano ID 默认使用 URL 安全的字符,不会出现 +、/ 或 =,特别适合做短链接的后缀。

Base62 编码方案

如果你的数据源是数据库自增ID,可以通过 Base62 编码变短。Base62 使用 0-9、A-Z、a-z 共62个字符,能把一个大数字压缩成很短的字符串。

比如,ID 为 1000000 的记录,转成 Base62 后是 4C92,才4位。用户分享起来方便,系统也能反向解码回原始ID。

注意事项

短ID越短,碰撞概率越高。6位的字符串最多只有 62^6 种组合,大约470亿,看似很多,但如果系统每天生成百万级ID,就得考虑冲突检测机制。可以在数据库加唯一索引,生成后先查重,有冲突就重新生成一次。

另外,别用纯数字的短ID做公开标识,容易被枚举。比如订单号从100001开始递增,别人就能顺着猜出你每天的订单量。加点随机性或者打乱编码规则会更安全。