我想为每个模型生成一个碰撞检查,完全唯一的数字ID。我不能使用自动递增id的原因是因为我不希望id可以预测。我也想避免使用UUID,但我也可以使用字母数字ID。我没有替换主键,但我正在使用它来获取API中的对象
这样的事情:
8230693489356
或者:
a435Ga256hb35
但不是:
ab66e4dd-4fee-4fb3-9519-efdc20e5d792
这不重复,因为:
提出的问题并没有解决我的问题,也没有解决问题,也没有接受答案。
最佳答案不会创建碰撞检查唯一ID,可能会发生碰撞
大多数答案都提示UUID,这不是我想要的。
问题只是要求一个唯一的ID,我要求具体的东西。
答案 0 :(得分:0)
因为你想成为唯一的身份证而不仅仅是另一个随机身份
我已将Timestamp和主机名附加到随机生成的Integer中。 既然你提到它不容易被猜到我已经用字符串md5进行了哈希,以生成最终的密钥。
import hashlib
import random
import time
import string
import socket
import sys
hostname = socket.gethostname()
def new_id(n):
return hashlib.md5((str(random.randint(1,sys.maxsize))+hostname+str(time.time()*1000)).encode('utf-8')).hexdigest()[:n]
>>> new_id(11)
'8c05917c1c7'