哈希、ID与随机数
随机 ID 要多长?从碰撞概率判断
使用工具
短随机 ID 方便但担心重复。候选总数只是起点,还需生成数量及是否均匀独立。用理论熵与碰撞工具分别改变条件;结果评估指定模型,不认证实际 ID 方案安全。
十六种字符、八位,候选数为 2³²
alphabet = 16
length = 8
16⁸ = 4,294,967,296
log₂(16⁸) = 32 bits填字符种类 16、长度 8。0~9、a~f 均匀独立选择,得 4294967296 种、32 bit,不是八 bit。八位十进数字空间不同;固定连字符增加外观长度却不增随机选择。
字符种类应按存储和比较实际区分的值计数。忽略大小写的存储不能把 A、a 当独立选择。先查生成集与后续规范化,工具不会由真实字符串列表推断。
生成越多,比较的配对增长更快
k = 10,000
k × (k − 1) ÷ 2 = 49,995,000 pairs十六种、八位、生成 10000 个,至少一对碰撞约 1.16%。候选约四十三亿看似很大,但问题是任意一对而非匹配固定参考。万件含近五千万对,不能只看件数占候选比例。
collisionProbability 是比例,0.01 为 1% 不是 0.01%。也不表示每百个 ID 一个重复,而是整组生成结果至少有一处重复的概率。
固定生成数再比较长度
十六种字符每增一位,空间乘十六。保持 10000 件,比较八、九、十位,才能隔离长度影响。先逐项改变,再对候选方案检查预计最大件数。
件数应涵盖同一命名空间中重复会冲突的全量,不仅一批。每天万件保留多年不能只填一天。分空间能否复用取决于识别规则,不能默认加日期前缀就解决。
检查实际生成是否均匀独立
模型假设均匀独立。时刻、序号、偏随机或重复 Seed 序列不能直接套用;必含字符类等条件也改变候选集。采用结果前需对照实际生成代码。
大件数时还检查近似适用范围。概率未算出不等于零,显示空间大小也不代表所有字段已算。应查看 method 和未计算状态,不夸大近似精度。
不易重复不等于可作秘密令牌
公开商品 ID 不重复与密码重置令牌不可猜是不同要求。后者需另看不可预测性、生成、尝试控制、有效期。工具计算参数模型,不评估真实密码安全。
最后需定可接受风险及碰撞检测、重生成等处理。低概率不自动取消唯一性约束和并发处理。示例用于比较长度,不是通用推荐字符数。