繁体   English   中英

如何生成与给定模式匹配的随机看起来唯一的标识符

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

我有一个users表,我需要为每个用户创建一个唯一的,随机外观的字母数字“ id”(它们通常已经具有自动递增的id)。 该标识符必须:

  • 独一无二
  • 随机寻找
  • 匹配模式AAAA-1234 (4个字母,4个数字)

有没有比保持随机生成字符串直到找到不在数据库中的字符串更好的方法?

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

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

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

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

计算$x % 26然后根据结果选择字母az。 设置$x = $x / 26 重复四次(我不了解PHP,因此您会在此处获得口头指示)。

计算$x % 10然后根据结果选择数字0-9。 设置$x = $x / 10 重复四遍。

我得到的前六个结果是:

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

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

此外,它仅在遇到冲突之前才适用于前40亿(ish)用户,但这仍然与字符串格式的限制相差不远。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM