我有一个users
表,我需要为每个用户创建一个独特的,随机的字母数字“id”(它们通常具有自动增量ID)。该标识符必须:
AAAA-1234
(4个字母,4个数字)有没有比保留随机生成字符串更好的方法,直到找到一个不在数据库中的字符串?
答案 0 :(得分:2)
为每个用户分配一个无聊的旧顺序(或使用您提到的其他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
它并不完美,但它并不明显。也许这就足够了。
此外,它只适用于前四十亿(ish)用户,然后才会发生冲突,但这只是远远超出了字符串格式的限制。