老板说:生成三位数的随机数,不能重复。这道题怎么破?

2018-06-07 16:02:49 +08:00
 s609926202

我是想自动生成一个唯一的二级域名名称,目前是: site-时间戳-用户 ID.domain.com

老板看到后说太长了,要控制在 3 位数,各位大神们有什么好的解决办法?

4713 次点击
所在节点    问与答
25 条回复
oIMOo
2018-06-07 22:56:41 +08:00
@chinvo

最近用到的一个,但是不确定不同值是否会产生相同 hash.


# Doc: http://www.drdobbs.com/database/hashing-rehashed/184409859
# code: https://sourceforge.net/p/cuckoo2mist/code/HEAD/tree/trunk/class_mist.py

def ELFHash(key):
hash = 0
x = 0
for i in range(len(key)):
hash = (hash << 4) + ord(key[i])
x = hash & 0xF0000000
if x != 0:
hash ^= (x >> 24)
hash &= ~x
return hash


def int2hex(n, len):
assert n is not None
assert len is not None
try:
hexval = ('0' * len) + "%x" % int(n)
except ValueError:
hexval = ('0' * len) + "%x" % int(n, 16)
return hexval[len * -1:]


def hashPJW(text):
number = ELFHash(text)
res = int2hex(number, 8)
return res
silencefent
2018-06-07 22:59:12 +08:00
递归存数据库里,用一个删一个
feverzsj
2018-06-07 23:30:01 +08:00
62 个可选字符的话,对应所有三位 base62 的十进制数范围是[3844, 238327],随机选择一个转成 base62,因为只有 234484 种可能,所以还要查重。
jingrui
2018-06-08 09:19:38 +08:00
1 楼对,生成前查下
s609926202
2018-06-08 11:47:09 +08:00
@jingrui 这样的话就得把每次生成的都存进数据库里了、存表里好呢还是存字段值好?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/461228

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX