django 如何在python中生成一个像imgur这样的简短的唯一ID?

rsl1atfo  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(135)

使用什么算法来生成短的唯一ID?例如1000万个7个字符的ID没有冲突。许多网站像“9gag.com“,ifunny.co,bitly.com等使用短ID作为统一资源定位器如何生成这样的ID很少冲突。

vwkv1x7d

vwkv1x7d1#

你可以在python中尝试secrets模块(>= 3.6)

import secrets
secrets.token_hex(nbytes=8)
secrets.token_urlsafe(nbytes=8)
...

字符串
我也做了测试,我没有发现任何冲突(但不能保证没有冲突),每几百万个生成的令牌。

def test_uniqueness(num_iter, fn, fn_kwargs):
     """
     would output list of tokens that collide,
     or empty list if no collision 
     """
     collisions = {}
     out = []
     for idx in range(num_iter):
         uid = fn(**fn_kwargs)
         if collisions.get(uid, None):
             out.append(uid)
         else:
             collisions[uid] = True
     return out

test_uniqueness(1000000, secrets.token_urlsafe, {'nbytes':8})

相关问题