如何生成与给定模式匹配的随机外观唯一标识符

How to generate random looking unique identifiers that match a given pattern

我有一个 users table,我需要为每个用户创建一个独特的、随机的字母数字 "id"(他们通常已经有自动递增的 ID)。此标识符必须:

有没有比一直随机生成字符串直到找到数据库中还没有的字符串更好的方法?

按照无聊的旧顺序为每个用户分配一个整数(或使用您提到的其他 ID)。称之为 $x.

设置$x = (($x + 2135587861) * 2654435769) & 0xffffffff.

设置$x = $x ^ ($x >> 15).

再次设置$x = (($x + 2135587861) * 2654435769) & 0xffffffff

计算$x % 26并根据结果选择一个字母a-z。设置 $x = $x / 26。重复四次(我不知道PHP,所以你在这里得到口头指示)。

计算$x % 10并根据结果选择一个数字0-9。设置 $x = $x / 10。重复四次。

我得到的前六个结果是:

HSQG-2102
DNQO-1176
TEKJ-5435
EHWX-6540
UPPH-0450
MVIX-5036

它并不完全完美,但并不明显。也许这就足够了。

此外,它仅适用于发生冲突之前的前 40 亿(左右)用户,但这与字符串格式的限制相去甚远。