VBA生成一个随机的唯一字母数字字符串

问题描述 投票:0回答:2

我在开发允许用户访问唯一URL的应用程序时需要为每个记录创建唯一ID(字符串),例如:

http://URL.com/BXD31F

下面的代码可用于创建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数据库的限制。

vba random unique ms-access-2016 id
2个回答
1
投票

如何确保创建的URLID是唯一的?

你不能。而且不会。查看加密安全的哈希算法...甚至those都永远不会永远“安全”。注意,哈希是VBA绝对支持零内置的东西,但是you can leverage .NET for that

另一种选择是让操作系统生成Globally Unique IDentifiers (GUID)这些将是唯一的,但比少数几个字符要长得多。

祝你好运!


1
投票

确保字符串在VBA中是唯一的,可以通过其他方式完成。例如,以日期时间为单位,该日期时间每秒都是唯一的,然后给它:

format(now, "YYMMDDHHNS")

就显而易见而言,请考虑对其进行一些更改。例如,从日期时间中删除一个随机的常数,让我们说181387(因为它是质数),然后将其转换为十六进制。然后就可以了:

Function UniqueString() As String

    Const someNumber = 181387 'it is a prime number
    UniqueString = Hex(Format(Now, "YYMMDDHHNS") - someNumber)

End Function

只需确保在调用该函数之前在同一时区中至少有1秒的时间。另外,最好事先考虑夏令时。通常,这不是一个好主意,会弹出很多问题,但是对于来说是可以的。

© www.soinside.com 2019 - 2024. All rights reserved.