首页 > 其他分享 >【超实用】教你生成GUID

【超实用】教你生成GUID

时间:2023-09-17 21:38:22浏览次数:48  
标签:guid UUID CoCreateGuid 生成 实用 strGUID GUID

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_API

全局唯一标识符(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 范围内的一个十六进制数。

在了解了概念之后,那我们就来动手吧。

01

还是老老老规矩,我们先来创建一个窗体,在窗体上放两个控件,一个文本框,一个按钮,分别命名为txtGUID,btnGUID

02

接着我们来添加一下代码,我们给按钮添加一下单击事件,代码如下:

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

03

最后,我们运行测试一下,结果如下:

【超实用】教你生成GUID_API_02

这里我们用到了API函数CoCreateGuid,通过调用API来实现生成GUID,其实还要以用另一个方法,可以利用Scriptlet.TypeLib 对象来实现,但会有问题,容易报“拒绝的权限”错误,这是因为由于安全限制,可能需要在计算机上注册并访问COM组件,所以这里,我直接调用了API函数。

好了,大家快去测试一下吧。


标签:guid,UUID,CoCreateGuid,生成,实用,strGUID,GUID
From: https://blog.51cto.com/willmiao/7503988

相关文章

  • 【java基础】Token令牌生成 token加密串 生成token Aes加密 Base64加密 JWT 【附
    先看效果:Token令牌-生成工具包括:头部(header)+载荷(payload)+签证(signature) 可以自定义加密盐: 源码:地址一:GitLab地址二:123盘地址三:百度盘提取码:666 ......
  • 「开源系统」mybatis-plus代码生成工具(自己基于官方的封装的,打包成了maven插件的方式)
    mybatis-plus代码生成工具本工具基于MyBatis-Plus的代码生成器,MyBatis-Plus官网:https://baomidou.com/,请尊重原作者作品。demo:https://gitee.com/javalaoniu/mybatis-code-maven-plugin-demo插件:https://gitee.com/javalaoniu/mybatis-plus-code-maven-plugin生成的项目......
  • Linux静态库生成指南
    Linux上的静态库,其实是目标文件的归档文件。在Linux上创建静态库的步骤如下:写源文件,通过 gcc-cxxx.c 生成目标文件。用 ar 归档目标文件,生成静态库。配合静态库,写一个使用静态库中函数的头文件。使用静态库时,在源码中包含对应的头文件,链接时记得链接自己的库。下面......
  • Spring Boot 实现各种参数校验,非常实用
    本文会详细介绍SpringValidation各种场景下的最佳实践及其实现原理,死磕到底!简单使用JavaAPI规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现。hibernatevalidation是对这个规范的实现,并增加了校验注解如@Email、@Length等。SpringValidation是对hiberna......
  • AI绘画:如何让图片开口说话生成视频?变现渠道有哪些?
    如何让AI绘画做出来的视频可以开口说话,本篇文章给你讲解清楚。这个项目市面上有很多种叫法,AI数字人,图片说话,图片数字人等等。废话不多说,直接以AI小和尚为例进行实操。1.生成图片:用Midjourney或者StableDiffusion都可以。当然你也可以用我生成好的图片。核心咒语提示词:魔法......
  • tortoise-orm 使用雪花算法生成主键ID
    importtimefromtortoiseimportTortoise,fields,run_asyncfromtortoise.modelsimportModelfromtypingimportAnyclassSnowflake:def__init__(self,machine_id:int):"""生成雪花算法ID:parammachine_id:机器ID......
  • 42-元组-生成器推导式创建元组-总结
           ......
  • python 生成文件的md5码
    Python生成文件的MD5码引言在开发过程中,我们经常需要对文件进行校验。MD5是一种常用的文件校验算法,它将文件转换为一串固定长度的哈希值,可以用于验证文件的完整性和正确性。本文将教会你如何在Python中生成文件的MD5码。整体流程下面是生成文件的MD5码的整体流程:步骤 描述1 打......
  • 生成数据集的平均值和标准差
    importtorchimportosimportnumpyasnpfromPILimportImagedefcal_mean_std(path:str):channels_sum,channels_squared_sum,nums=0,0,0path_list=os.listdir(path)forimg_pathinpath_list:image_path=os.path.join(path,i......
  • Vue源码学习(五):<templete>渲染第四步,生成虚拟dom并将其转换为真实dom
    好家伙, 前情提要:在上一篇我们已经成功将ast语法树转换为渲染函数 现在我们继续 1.项目目录代码已开源https://github.com/Fattiger4399/analytic-vue.git手动调试一遍,胜过我解释给你听一万遍新增文件:vnode/index.js  vnode/patch.js  lifecycle.js 2.虚......