检查是否有任何特定字符长度的唯一标记

Check if there are any unique tokens left of a certain character length

我有一个 Post 模型,其属性为 token

我正在使用 SecureRandom.urlsafe_base64(length_of_token) 创建令牌。

令牌不需要是不可猜测的,但必须是唯一的。

我从 1 个字符长的标记开始,当它们全部用完(所有 64 种组合)时,我应该继续使用 2 个字符长的标记。

我应该如何检查 3 个字符长的令牌是否还有任何令牌变体?

它会是这样的:

64**n - Post.count(:token).where('char_length(token) = ?', n)

第一部分给出可能的组合数,第二部分给出标记长度为 n 的记录数。

但请不要忘记,您的随机生成器不一定会生成剩余的可能组合。随着时间的推移,碰撞会呈指数级增长,因此我强烈反对这种实施方式。

注意:char_length 语句是 MySQL 特定的,因此根据您的 RDBMS,您必须调整这部分。