1 uuid是什么     

        UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128 bit ).  它的唯一性和一致性特点使得可以无需注册过程就能够产生一个新的UUID.

        UUID可以被用作多种用途, 既可以用来短时间内标记一个对象, 也可以可靠的辨别网络中的持久性对象. 

2 uuid的函数生成方法

  1.  uuid.uuid1([node[, clock_seq]])  : 基于时间戳

  使用主机ID, 序列号, 和当前时间来生成UUID, 可保证全球范围的唯一性. 但由于使用该方法生成的UUID中包含有主机的网络地址, 因此可能危及隐私. 该函数有两个参数, 如果 node 参数未指定, 系统将会自动调用 getnode() 函数来获取主机的硬件地址. 如果 clock_seq  参数未指定系统会使用一个随机产生的14位序列号来代替. 

ios 唯一性 唯一性编号指的是什么_随机数

  2.  uuid.uuid3(namespace, name) : 基于名字的MD5散列值

  通过计算命名空间和名字的MD5散列值来生成UUID, 可以保证同一命名空间中不同名字的唯一性和不同命名空间的唯一性, 但同一命名空间的同一名字生成的UUID相同.

  3.  uuid.uuid4() : 基于随机数

  通过随机数来生成UUID. 使用的是伪随机数有一定的重复概率. 

ios 唯一性 唯一性编号指的是什么_ios 唯一性_02

  4.  uuid.uuid5(namespace, name) : 基于名字的SHA-1散列值

  通过计算命名空间和名字的SHA-1散列值来生成UUID, 算法与 uuid.uuid3() 相同.

3. 通过四函数生成uuid字节(128位)

>>> import uuid

>>> # make a UUID based on the host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> 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)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # get the raw 16 bytes of the UUID
>>> x.bytes
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

4 字节串和字符串关系

【1】字节串(bytes)和字符串(string)的对比:

  • 字符串由若干个字符组成,以字符为单位进行操作;字节串由若干个字节组成,以字节为单位进行操作。
  • 字节串和字符串除了操作的数据单元不同之外,它们支持的所有方法都基本相同。
  • 字节串和字符串都是不可变序列,不能随意增加和删除数据。

【2】字符串和 bytes 存在着千丝万缕的联系,我们可以通过字符串来创建 bytes 对象,或者说将字符串转换成 bytes 对象。有以下三种方法可以达到这个目的:

  • 如果字符串的内容都是 ASCII 字符,那么直接在字符串前面添加b前缀就可以转换成 bytes。
  • bytes 是一个类,调用它的构造方法,也就是 bytes(),可以将字符串按照指定的字符集转换成 bytes;如果不指定字符集,那么默认采用 UTF-8。
  • 字符串本身有一个 encode() 方法,该方法专门用来将字符串按照指定的字符集转换成对应的字节串;如果不指定字符集,那么默认采用 UTF-8。
  • bytes 类也有一个 decode() 方法,通过该方法可以将 bytes 对象转换为字符串。紧接上面的程序,添加以下代码:

【3】#通过 decode() 方法将 bytes 转换成字符串

  • str1 = b5.decode('UTF-8')
  • print("str1: ", str1)

【4】#通过 encode() 方法将字符串转换成 bytes

  • b5 = "C语言中文网8岁了".encode('UTF-8')
  • print("b5: ", b5)

5 通过字节串生成uuid

import uuid
# ss = uuid.uuid1()
fs = uuid.UUID(int=uuid.getnode())
ss = uuid.UUID('{12345678-1234-5678-1234-567812345678}')
rre = uuid.UUID('12345678123456781234567812345678')
rrs = uuid.UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
mr = uuid.UUID(int=0x12345678123456781234567812345678)
rr = uuid.UUID( bytes= b'\x12\x34\x56\x78'*4  )
rr = uuid.UUID(bytes_le=b'\x78\x56\x34\x12\x34\x12\x78\x56\x12\x34\x56\x78\x12\x34\x56\x78' )
rr=uuid.UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
rr=uuid.UUID(int=0x12345678123456781234567812345678)