UUID生成方法总结

UUID生成方法总结转自 http puxx blog ustc edu cn index php 2013 06 28 uuid E7 94 9F E6 88 90 E6 96 B9 E6 B3 95 E6 80 BB E7 BB 93 nbsp UID 简介 nbsp 摘自维基百科通用唯一识别码 英语 UniversallyU 简称 UUID 是一种软件建构的标准 亦为自由软

转自:http://puxx.blog.ustc.edu.cn/index.php/2013/06/28/uuid%E7%94%9F%E6%88%90%E6%96%B9%E6%B3%95%E6%80%BB%E7%BB%93/

 

UID简介

 

摘自维基百科

通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准,亦为自由软件基金会组织在分散式计算环境领域的一部份。

UUID的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的UUID,是微软公司的全局唯一标识符(GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等。另外我们也可以在e2fsprogs包中的UUID库找到实现。


生成方法

搜集了一些UUID的生成方法,整理如下

Shell

  • Unix/Linux环境中大都有一个名为uuidgen的小工具,运行即可生成一个UUID到标准输出
  • 读取文件/proc/sys/kernel/random/uuid即得UUID,例如:
    cat /proc/sys/kernel/random/uuid 

libuuid

libuuid是一个用于生成UUID的C库,具体用法参考http://linux.die.net/man/3/libuuid,示例如下:

#include 
    
      #include 
     
       int main(int argc, char argv) { uuid_t uuid; char str[36]; uuid_generate(uuid); uuid_unparse(uuid, str); printf("%s\n", str); return 0; } 
      
    

在Linux下编译时需要链接uuid库

gcc -o uuid uuid.c -luuid 

在Ubuntu中,可以用下面的命令安装libuuid:

sudo apt-get install uuid-dev 

boost uuid

Boost库是一个可移植的开源C++库,它提供了UUID的实现。

下面的代码可以生成一个UUID

#include 
    
      #include 
     
       boost::uuids::uuid a_uuid = boost::uuids::random_generator(); 
      
    

Qt QUuid

Qt是一个跨平台的C++编程框架,QUuid类实现了UUID的生成、比较、转换等功能。

函数QUuid createUuid();可用于生成一个随即UUID。示例如下:

#include 
    
      #include 
     
       #include 
      
        int main() { QUuid uuid = QUuid::createUuid(); std::cout << qPrintable(uuid.toString()) << std::endl; return 0; } 
       
      
    

CoCreateGuid

Windows下提供了函数CoCreateGuid用于生成GUID。需要使用的头文件是”objbase.h”,需要链接的库是ole32.lib,函数原型为:

HRESULT CoCreateGuid(GUID *pguid); 

GUID的原型为

typedef struct _GUID { DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8]; } GUID; 

Java

JDK 1.5以上支持UUID,用法如下:

import java.util.UUID; String uuid = UUID.randomUUID().toString();
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227375.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午9:27
下一篇 2026年3月16日 下午9:28


相关推荐

  • 代理重加密_代理重加密BBS方案

    代理重加密_代理重加密BBS方案云计算中的数据机密性风险极大地阻碍了云计算的应用,而在用户端加密的模式对于数据共享来说非常不便,用户频繁的获取和释放授权将使得用户增效据加解密工作繁重。因此代理重加密技术在云端进行数据的密文转换,减轻了用户端的负担,同时加强了云端数据的保密性。一、代理重加密代理重加密是密文间的一种密钥转换机制,是由Blaze等人在1998年的欧洲密码学年会上提出的,并由Ateniese等人在2005年的网络和分布式系统安全研讨会议和2007年的美国计算机学会计算机与通信安全会议上给出了规范的形式化定义。在代理重加密中

    2025年10月14日
    3
  • Node.js REPL模块「建议收藏」

    Node.js REPL模块「建议收藏」repl模块提供了一个”读取-求值-输出-循环”(REPL交互式解释器)的实现,它可以作为一个单独的程序,或者包含在其他程序内部。

    2025年7月24日
    5
  • scrapy中ROBOTSTXT_OBEY = False,不遵守Robot协议文件的规则

    scrapy中ROBOTSTXT_OBEY = False,不遵守Robot协议文件的规则在scrapy中创建项目以后,在settings文件中有这样的一条默认开启的语句:setting文件中配置:#Obeyrobots.txtrules#默认是True,遵守robots.txt文件中的协议,遵守允许爬取的范围。#设置为False,是不遵守robo协议文件。。。ROBOTSTXT_OBEY=True观察代码可以发现,默认为True,就是要遵守rob…

    2022年6月11日
    44
  • libaio简介

    libaio简介liaio 介绍 nbsp linuxkernel 提供了 5 个系统调用来实现异步 IO 文中最后介绍的是包装了这些系统调用的用户空间的函数 libaio 系统调用 AIO 系统调用总共五个 后面会一一介绍 intio setup unsignednr events nbsp aio context t ctxp intio destroy aio context tctx

    2026年3月20日
    2
  • SAP ABAP计划 SY-REPID与SY-CPROG差异

    SAP ABAP计划 SY-REPID与SY-CPROG差异

    2021年12月30日
    46
  • touches和targetTouches的区别

    touches和targetTouches的区别首先 如果我手指触碰的点都在我所绑定的事件上 比如说都绑在了一个 div 上 而我的两个手指都触摸这个 div 那么 touches 和 targetTouche 是没有区别的 都可以获得一个 TouchList 列表 里面包含了触碰点的信息 但是 如果我用两个手指 一个触摸绑定事件的 div 另一个触摸除了此 div 的其他地方 那么 touches 和 targetTouche 就是有区别的了 touches

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号