1.介绍UUID是UniversallyUniqueIdentifier的缩写。UUID的目的是让分布式系统在不借助中心节点的情况下,生成UUID来标识一些唯一的信息;GUID,是GloballyUniqueIdentifier的缩写,与UUID是同一个东西,但它来自微软。规范定义UUID来源于IETF发布的一个规范:AUniversallyUniqueIDentifier(UUID)URNNamespace。UUID来源于OSF的DCE规范,也就是RFC4122的前身。GUID来自微软。请注意,RFC4122的作者之一是Microsoft员工。以下是摘录。摘要RFC4144中的该规范为UUID(通用唯一标识符)定义了统一资源名称命名空间,也称为GUID(全球唯一标识符)。UUID长度为128位,可以保证跨空间和时间的唯一性。UUID最初用于Apollo网络计算系统,后来用于开放软件基金会(OSF)分布式计算CE环境)和DnMicrosoftWindows平台。此规范源自DCE规范,并获得了OSF(现在称为TheOpenGroup)的许可。来自早期版本的DCE规范的信息已合并到本文档中。不知道什么标题好1UUID是一个16字节(128位)的数字;为了方便阅读,UUID通常表示为:123e4567-e89b-12d3-a456-4266554400001UUID由连字符分成五段,形式为8-4-32个字符为4-4-12。其中的字母以十六进制表示,大小写无关。2.不同版本的UUID本身经过了多个版本的演进,每个版本的算法都不一样。标准格式UUID的格式是这样的:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxxN只会是8、9、a、bM,代表版本号。由于UUID标准实现有5个版本,所以只有版本1、2、3、4、5。简介版本1:基于时间的UUID由当前时间戳和机器MAC地址生成;由于算法中使用了MAC地址,所以这个版本的UUID可以保证全局唯一。但同时,因为暴露了电脑的MAC地址和这个UUID的生成时间,这也是这个版本的UUID被诟病的地方。在python中的使用示例:importuuiduuid.uuid1()UUID('444b5cc0-ae5d-11e6-8d22-28924a431726')uuid.uuid1()UUID('46a9bf21-ae5d-11e6-9549-28924a431726')其中,最后是12字符28924a431726是我电脑网卡的MAC地址version2:DCE-safeUUIDDCE-safeUUID和time-basedUUID算法相同,只是时间戳的前4位会被POSIXUID或GID代替。但是在UUID规范中并没有明确规定,所以基本上所有的UUID实现都不会实现这个版本。Version3:Namespace-basedUUID(MD5)用户指定一个命名空间和一个特定的字符串,通过MD5哈希生成一个UUID;根据规范描述,这个版本存在是为了向后兼容?通常,我们在python中很少使用这个版本:importuuiduid.uuid3(uuid.NAMESPACE_DNS,"myString")UUID('21fc48e5-63f0-3849-8b9d-838a012a5936')uuid.uuid3(uuid.NAMESPACE_DNS,"myString")UUID('21fc48e5-63f0-3849-8b9d-838a012a5936')java中使用的示例System.out.println(UUID.nameUUIDFromBytes("myString".getBytes("UTF-8")).toString());Java只支持UUID生成version3和version4Version4:UUIDbasedonrandomnumbersGenerateUUIDsbasedonrandomnumbersorpseudo-randomnumbers.这种UUID重复的概率是可以计算的,但是随机的事情就像买彩票一样:你不可能指望它发财,但狗屎运通常会在不经意间降临。这个版本应该是大家无意间用得最多的版本;python中使用的示例:importuuiduuid.uuid4()UUID('e584539d-a334-4f15-9819-88d73fcf707d')uuid.uuid4()UUID('76ec02cc-1b1d-4ad3-bd09-a4f6d67c7af4')和最熟悉的Java:System.out.println(UUID.randomUUID().toString());Version5:namespace-basedUUID(SHA1)和version3一样,但是hash函数在python中被SHA1代替了:importuuiduid.uuid5(uuid.NAMESPACE_DNS,"myString")UUID('cd086011-6aac-5a06-a94a-0b67c59649ba')uuid.uuid5(uuid.NAMESPACE_DNS,"myString")UUID('cd086011-6aac-5a06-a94a-0b67c59649ba')三、UUID的应用从几个版本的定义来看感觉不是特别完善,而版本4可能是最常用的,但是在实际业务场景中,考虑到可读性、唯一性和长度,我们一般不会选择UUID作为数据库的主键。至于其他场景的应用,大家可以结合具体场景使用各个版本的实现。4.UUID和各种编程语言Microsoft:http://msdn.microsoft.com/en-...Linux:http://en.wikipedia.org/wiki/...Android:http://developer.android.com/...PHP:http://php.net/manual/en/func...MySQL:http://dev.mysql.com/doc/refm...Java:http://文档。oracle.com/javase...nodejs-https://github.com/broofa/nod...参考:https://en.wikipedia.org/wiki...https://github.com/simongong/...http://www.blogjava.net/feely...转载自:http://www.jianshu.com/p/d77f...p.p1{margin:0.0px0.0px0.0px0.0px;行高:19.0px;字体:13.0px'HelveticaNeue';color:#000000}顺便给媳妇打个广告,赚点奶粉钱
