如何生成一个独一无二的ID值,并可通过电话或电子邮件轻松传递,即使易于记忆,也不易于被猜测。
我使用数据库。但由于要将ID提供给不同的人使用,我不想让它与数据库绑定。我可以对已经在数据库中具有的唯一ID进行某些处理,但不能直接使用它,以避免被猜测。
我正在使用Python,尝试使用uuid
,但uuid
太长了,不易于人类阅读。
有没有办法创建一个人性化的可发音的ID?
如何生成一个独一无二的ID值,并可通过电话或电子邮件轻松传递,即使易于记忆,也不易于被猜测。
我使用数据库。但由于要将ID提供给不同的人使用,我不想让它与数据库绑定。我可以对已经在数据库中具有的唯一ID进行某些处理,但不能直接使用它,以避免被猜测。
我正在使用Python,尝试使用uuid
,但uuid
太长了,不易于人类阅读。
有没有办法创建一个人性化的可发音的ID?
对于电子邮件,我使用的是:
from base64 import b64encode
from os import urandom
key = b64encode(urandom(9))
通过更改数字,您可以增加/减少长度。 有时您会得到+和/字符,如果愿意,可以将它们剥离。
编辑:
既然您还想通过电话传递它们,也许b32encode(urandom(5))
是更好的选择,因为它不会给您任何小写或不寻常的字符。
memorable_id = ''.join(dictionary[random.randint(0, 65535)] for Null in range(4))
就更好了。 - agf>>> import uuid
>>> hash(str(uuid.uuid1())) % 1000000
380539
>>> hash(str(uuid.uuid1())) % 1000000
411563
可以,但需要对问题空间进行更多限制,包括:
然后您可以执行以下操作:
_UID_INTERNALS = set()
def getID(obj):
if hasattr(obj, 'UID'):
return obj.UID
title = obj.title.encode("ascii", errors="ignore")
title = title.lower()
title = "-".join(title.split())
if not title:
title = "unnamed-object"
UID = title
num = 1
while UID in _UID_INTERNALS:
UID = title + str(num)
num += 1
_UID_INTERNALS.add(UID)
obj.UID = UID
return UID
hash(str(your_id))
是什么意思? - schlamar