oi,好久不见呀,最近又许久未更新了。大家也都在催更ERP的文章,可最近着实比较忙,趁今天有点小空隙,给大家分享个非常实用的代码,生成GUID。
我们先来看两个概念,在知道什么是GUID之前,必须要先知道UUID,什么是UUID呢?我们来看一下概念。
UUID
UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。最广泛应用的UUID,是微软公司的全局唯一标识符(GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等。另外我们也可以在e2fsprogs包中的UUID库找到实现。
那知道了UUID知道,我们来看看GUID的概念
GUID
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。GUID一词有时也专指微软对UUID标准的实现。
那GUID是怎么组成的呢?
GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制数。
在了解了概念之后,那我们就来动手吧。
还是老老老规矩,我们先来创建一个窗体,在窗体上放两个控件,一个文本框,一个按钮,分别命名为txtGUID,btnGUID
接着我们来添加一下代码,我们给按钮添加一下单击事件,代码如下:
Private Declare PtrSafe Function CoCreateGuid Lib "ole32.dll" (ByRef guid As Any) As Long
Private Sub btnGUID_Click()
Dim guid(0 To 15) As Byte
Dim i As Long
Dim strGUID As String
' 调用CoCreateGuid函数生成GUID
Call CoCreateGuid(guid(0))
' 将字节数组转换为字符串形式的GUID
For i = 0 To 15
strGUID = strGUID & Right("00" & Hex(guid(i)), 2)
If i = 3 Or i = 5 Or i = 7 Or i = 9 Then
strGUID = strGUID & "-"
End If
Next i
Me.txtGUID = strGUID
End Sub
最后,我们运行测试一下,结果如下:
这里我们用到了API函数CoCreateGuid,通过调用API来实现生成GUID,其实还要以用另一个方法,可以利用Scriptlet.TypeLib 对象来实现,但会有问题,容易报“拒绝的权限”错误,这是因为由于安全限制,可能需要在计算机上注册并访问COM组件,所以这里,我直接调用了API函数。
好了,大家快去测试一下吧。