我正在使用一个API,希望我使用其API为交易生成不透明的“引用ID”,换句话说,就是用户无法以任何方式猜测或推断的唯一引用。 (“推断”英语是否正确?)

这是我目前共同研究的内容:

randomRef = randint(0, 99999999999999)
while Transaction.objects.filter(transactionRef = randomRef).count():
    randomRef = randint(0, 99999999999999)

Transaction.objects.create(user=user, transactionRef=randomRef, price=999)

不幸的是,我的数据库目前似乎缺少事务。我意识到我的方法并不是特别安全的线程(例如,我在多个mod_wsgi apache线程上运行相同的Django代码,它们都可能生成相同的randomRef!)

有谁有更好的技巧为我生成随机主键?

最佳答案

为什么不加密普通的顺序ID呢?对于不知道加密 key 的人来说,这些ID看起来就像是随机的。您可以编写一个包装器,该包装器将在到数据库的途中自动解密ID,并在从数据库的途中对其进行加密。

10-04 15:57