zoukankan      html  css  js  c++  java
  • Python——uuid

      uuid模块在Python 2.5以后引入,接口包括:不可变对象UUID(UUID类)和函数uuid1()、uuid3()、uuid4()和uuid5(),后面的四个函数用于生成 RFC 4122 规范中指定的第1、3、4、5版UUID。使用uuid1()或uuid4()可以获得一个唯一的ID,uuid1()包含了主机的网络名称,uuid4()不涉及网络主机名,仅生成一个随机UUID,因此从隐私保护角度uuid4()更加安全。

     class uuid.UUID([hex[, bytes[, bytes_le[, fields[, int[, version]]]]]]) 

      该类用于从参数给定的内容中实例化UUID对象(hex, bytes, bytes_le, fields, int 必须且只能指定一个):

      hex:指定32个字符以创建UUID对象,当指定一个32个字符构成的字符串来创建一个UUID对象时,花括号、连字符和URN前缀等都是可选的;

      bytes:指定一个大端字节序的总长16字节的字节串来创建UUID对象;

      bytes_le:指定一个小端字节序的总长16字节的字节串来创建UUID对象;

      fields:指定6个整数域,共计128位来创建UUID(其中,32位作为time_low段,16位作为time_mid段,16位作为time_hi_version段,8位作为clock_seq_hi_variant段,8位作为clock_seq_low段,48位作为node段);

      int:直接指定一个长度为128个二进制位的整数用于创建UUID对象;

      version:(可选)指定UUID的版本,从1到5,一旦指定了该参数,生成的UUID将具有自己的变体(variant)和版本数,具体请参考RFC 4122,

     例.

    下面的各种方法创建相同的UUID对象,

    u = UUID('{12345678-1234-5678-1234-567812345678}')
    u = UUID(hex = '12345678123456781234567812345678')
    u = UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
    u = UUID(bytes='x12x34x56x78'*4)
    u = UUID(bytes_le='x78x56x34x12x34x12x78x56' +
                  'x12x34x56x78x12x34x56x78')
    u = UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
    u = UUID(int=0x12345678123456781234567812345678)
    

    UUID对象含有以下只读属性

     UUID.bytes 

      以16个字节构成的字节串形式表示UUID,包含6个大端字节序的整数域;

    >>> u.bytes
    'x124Vxx124Vxx124Vxx124Vx'
    

       

     UUID.bytes_le 

      以16个字节构成的字节串形式表示UUID,包含6个小端字节序的整数域;

    >>> u.bytes_le
    'xV4x124x12xVx124Vxx124Vx'
    

      

     UUID.fields 
      以元组形式存放的UUID的6个整数域,该元组中的6个元素分别可以通过6个属性查看,还额外导出了两个属性(下面的每个域的名称也是UUID对象的一个属性):
    含义
    time_low UUID的初始32位
    time_mid 接前一域的16位
    time_hi_version 接前一域的16位
    clock_seq_hi_variant 接前一域的8位
    clock_seq_low 接前一域的8位
    node UUID的最后48位
    time UUID的总长60位的时间戳
    clock_seq 14位的序列号
    >>> u.fields
    (305419896L, 4660L, 22136L, 18L, 52L, 95073701484152L)
     
     UUID.hex 
      以32个字符表示的UUID
    >>> u.hex
    '12345678123456781234567812345678'
      
     UUID.int 
      以一个长度为128个二进制位的整数表示的UUID;
    >>> u.int
    24197857161011715162171839636988778104L
      
     UUID.urn 
      以 RFC 4122 中指定的URN形式表示的UUID;
    >>> u.urn
    'urn:uuid:12345678-1234-5678-1234-567812345678'
      
     UUID.variant 
      UUID变体(variant),决定UUID内部的布局,已有的值为 RESERVED_NCSRFC_4122RESERVED_MICROSOFT 或 RESERVED_FUTURE
    >>> u.variant
    'reserved for NCS compatibility'
      
     UUID.version 
      UUID版本,只有当变体为 RFC_4122 时才有效。
    >>> u.version
    >>>
    

      这里由于u.variant == 'reserved for NCS compatibility',所以此处u.version为空。

      
    uuid模块还定义了如下函数
     
     uuid.getnode() 
      获取硬件的地址并以48位二进制长度的正整数形式返回,这里所说的硬件地址是指网络接口的MAC地址,如果一个机器有多个网络接口,可能返回其中的任一个。如果获取失败,将按照RFC 4122的规定将随机返回的48位二进制整数的第8位设置成1。
    >>> uuid.getnode()
    152667293855L
      
     uuid.uuid1([node[, clock_seq]]) 
      利用主机ID、序列号和当前时间生成一个UUID,如果参数 node 没有给定,会调用 getnode() 来获取硬件地址。如果参数中指定了 clock_seq ,使用参数中给定的时钟序列作为序列号,否则使用一个随机的14位长的序列号。
    >>> uuid.uuid1()
    UUID('a89e9d00-a710-11e4-a84a-00238bae089f')
      
     uuid.uuid3(namespace, name) 
      基于命名空间标识符(实质上是一个UUID)和一个名称(实质上是一个字符串)的MD5哈希值生成UUID。
      
     uuid.uuid4() 
      生成一个随机的UUID
    >>> uuid4()
    UUID('b9f9fb88-49f3-4cea-9885-19e57c3572c6')
      
     uuid.uuid5(namespace, name) 
      基于命名空间标识符(实质上是一个UUID)和一个名称(实质上是一个字符串)的SHA-1哈希值生成UUID
      
    关于uuid3()和uuid5()中提到的命名空间标识符,uuid模块定义了如下的备选项
     uuid.NAMESPACE_DNS 
      当指定该命名空间时,参数 name 是一个完全限定的(fully-qualified)域名
      
     uuid.NAMESPACE_URL 
      当指定该命名空间时,参数 name 是一个URL
      
     uuid.NAMESPACE_OID 
      当指定该命名空间时,参数 name 是一个ISO OID
      
     uuid.NAMESPACE_X500 
      当指定该命名空间时,参数 name 是一个DER格式或文本格式的X.500 DN。
      
    关于属性variant,uuid模块定义了如下的常量
      
     uuid.RESERVED_NCS 
      该常量为兼容NCS而保留;
      
     uuid.RFC_4122 
      按照 RFC 4122 的规定来确定UUID的布局;
      
     uuid.RESERVED_MICROSOFT 
      该常量位兼容微软而保留
       
     uuid.RESERVED_FUTURE 
      该常量为未来可能的定义保留
    可以在Python中查看这些常量:
    >>> uuid.RESERVED_NCS
    'reserved for NCS compatibility'
    >>> uuid.RFC_4122
    'specified in RFC 4122'
    >>> uuid.RESERVED_MICROSOFT
    'reserved for Microsoft compatibility'
    >>> uuid.RESERVED_FUTURE
    'reserved for future definition'
  • 相关阅读:
    python路径相关
    python之json
    python之正则表达式备忘
    MD5 SHA1 HMAC HMAC_SHA1区别
    微信根据openid给用户发送图文消息
    最近做的几个小程序
    5000万pv小程序,高并发及缓存优化,入坑
    小程序 后台发送模板消息
    mysql 组合索引
    php 拆分txt小说章节保存到数据库
  • 原文地址:https://www.cnblogs.com/Security-Darren/p/4252868.html
Copyright © 2011-2022 走看看