【发布时间】:2020-02-12 19:01:44
【问题描述】:
我需要为每条记录创建一个唯一 ID(字符串),因为我正在开发一个允许用户访问唯一 URL 的应用程序,例如:
以下代码用于创建 URLID:
Public Function getURLID(ID As Double) As String
Randomize
Dim rgch As String
rgch = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
Dim i As Long
For i = 1 To 5
getURLID = getURLID & Mid$(rgch, Int(Rnd() * Len(rgch) + 1), 1)
Next
End Function
如何确保创建的 URLID 是唯一的?我需要查询数据库以确保它之前没有生成吗?该表有 500 万条记录。 dlookup 查询会超出我的 MSAccess 数据库的限制。
我考虑过使用时间字符串来生成 URLID:
Format(Now, "yymmddhhmmss")
但是,我只想要一个简单的 5 个字符的字符串。
【问题讨论】:
-
Access 可以生成保证每个表唯一的 ID 列。使用它有什么问题?
-
@Tomalak 大概是为了防止 URL 欺骗 (?);即,如果我得到一个
url.com/12345的链接,我可以将 URL 更改为url.com/12346以查看我得到的内容,并且根据链接的内容,我不希望这很容易做到。行 ID 的哈希可以工作,但不会更安全。也就是说,OP 的示例 URL 是http,所以谁知道它需要多么安全。 -
取决于应用程序的类型。如果内容是公开的,谁在乎是否有人签出相邻的 URL。如果内容不公开,则 URL 参数不应参与身份验证。如果内容是半公开的(无论这意味着什么),您可以使用某种自定义的 base-N 表示法对数字进行编码,以使其不太可预测并且看起来不那么数字,就像链接缩短器那样。
-
我认为 那 是 OP 正在寻找的
标签: vba random uniqueidentifier ms-access-2016