欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

python: 使用UUID库生成唯一ID

shiping1 的头像
Python使用UUID库生成唯一ID
 
资料:

    Python官方Doc:《20.15. uuid — UUID objects according to RFC 4122》
    UUID的算法介绍:《A Universally Unique IDentifier (UUID) URN Namespace》

概述:

    UUID是128位的全局唯一标识符,通常由32字节的字符串表示。
    它可以保证时间和空间的唯一性,也称为GUID,全称为:
            UUID —— Universally Unique IDentifier       Python 中叫 UUID
            GUID —— Globally Unique IDentifier          C#  中叫 GUID

    它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。
    UUID主要有五个算法,也就是五种方法来实现:

       1、uuid1()——基于时间戳

               由MAC地址、当前时间戳、随机数生成。可以保证全球范围内的唯一性,
               但MAC的使用同时带来安全性问题,局域网中可以使用IP来代替MAC。

       2、uuid2()——基于分布式计算环境DCE(Python中没有这个函数)

                算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。
                实际中很少用到该方法。

      3、uuid3()——基于名字的MD5散列值

                通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,
                和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。   

       4、uuid4()——基于随机数

                由伪随机数得到,有一定的重复概率,该概率可以计算出来。

       5、uuid5()——基于名字的SHA-1散列值

                算法与uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法

使用方面:

    首先,Python中没有基于DCE的,所以uuid2可以忽略;
    其次,uuid4存在概率性重复,由无映射性,最好不用;
    再次,若在Global的分布式计算环境下,最好用uuid1;
    最后,若有名字的唯一性要求,最好用uuid3或uuid5。

编码方法:

    # -*- coding: utf-8 -*-

    import uuid

    name = "test_name"
    namespace = "test_namespace"

    print uuid.uuid1()  # 带参的方法参见Python Doc
    print uuid.uuid3(namespace, name)
    print uuid.uuid4()
    print uuid.uuid5(namespace, name)


转自: http://www.cnblogs.com/dkblog/archive/2011/10/10/2205200.html

来自 http://blog.sina.com.cn/s/blog_8cf0057a01015dvs.html

Python中生成唯一码(uuid的使用)

分类: Python 784人阅读 评论(0) 收藏 举报

转自:http://2goo.info/blog/panjj/other/2010/07/17/106

在C#中很容易生成一组唯一码,最常用的是结构体GUID的NewGuid()实例。如果C#运行Guid.NewGuid();将会得到据说世界唯一的号码,形如:887687be-00cf-4dca-8fe4-7c4fc19b9ecc 。最近看了一下Python的相关模块,也发现了一个模块uuid。当然里面的类和函数也不亚于C#。详细的东西就不一一介绍了,有兴趣的朋友,搜索uuid或者参考官方文档吧。以下只是照搬官方文档的典型案例,用中文说明一下:


>>> import uuid
 
# 生成基于计算机主机ID和当前时间的UUID
>>> uuid.uuid1()
输出结果:
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')
 
# 基于命名空间和一个字符的MD5加密的UUID
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
输出结果:
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')
 
# 随机生成一个UUID
>>> uuid.uuid4()
输出结果:
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')
 
# 基于命名空间和一个字符的SHA-1加密的UUID
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
输出结果:
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')
 
# make a UUID from a string of hex digits (braces and hyphens ignored)
#根据十六进制字符生成UUID(英语好的请看上面的原话)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')
# convert a UUID to a string of hex digits in standard formUUID
#转换成十六进制的UUID表现字符(英语好的请看上面的原话)
>>> str(x)
输出结果:
'00010203-0405-0607-0809-0a0b0c0d0e0f'
 
# 获取原始UUID的16位字符
>>> x.bytes
输出结果:
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
 
#生成16位字符的UUID
>>> uuid.UUID(bytes=x.bytes)
输出结果:
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

来自 http://blog.csdn.net/shanliangliuxing/article/details/17616791

普通分类: