zoukankan      html  css  js  c++  java
  • 短uuid生成

    UUID

    • UUID是128位的全局唯一标识符,通常由32字节的字符串表示。它可以保证时间和空间的唯一性,python中称为UUID,其他语言中可能称为GUID。
    • 它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。
    • UUID主要有五个算法,也就是五种方法来实现:
      • uuid1()——基于时间戳。由MAC地址、当前时间戳、随机数生成。可以保证全球范围内的唯一性,但MAC的使用同时带来安全性问题,局域网中可以使用IP来代替MAC。
      • uuid2()——基于分布式计算。环境DCE(Python中没有这个函数)算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。实际中很少用到该方法。
      • uuid3()——基于名字的MD5散列值。通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。
      • uuid4()——基于随机数。由伪随机数得到,有一定的重复概率,该概率可以计算出来。
      • uuid5()——基于名字的SHA-1散列值。算法与uuid3相同,不同的是使用 SHA-1算法。

    短UUID

    • python的uuid都是32位的,比较长,处理起来效率比较低,
    • 本算法利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUID分成8组,每4个为一组,然后通过模62操作,结果作为索引取出字符,
    • 最后生成的Uuid,只有8位,代码如下:
    #uuid4,可以换成uuid1
    from uuid import uuid4
    uuidChars = ("a", "b", "c", "d", "e", "f",
           "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
           "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
           "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
           "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
           "W", "X", "Y", "Z")
    def short_uuid():
      uuid = str(uuid4()).replace('-', '')
      result = ''
      for i in range(0,8):
        sub = uuid[i * 4: i * 4 + 4]
        x = int(sub,16)
        result += uuidChars[x % 0x3E]
      return result
    print(short_uuid())
    print(short_uuid())
    print(short_uuid())
    
  • 相关阅读:
    SpringMVC中静态获取request对象 Spring中获取 HttpServletRequest对象【转载】
    springcloud 的loadbalancer 轮询算法切换方法 2021.4.3
    springboot项目启动增加图标
    rabbitmq 端口作用以及修改方法
    centos8 安装rabbitmq
    springcloud config client Value获取不到信息的问题的处理方法
    springcloud config配置git作为数据源然后启动报错 If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    Sublime Text的列模式如何操作
    centos8 安装redis
    jQuery简单的Ajax调用
  • 原文地址:https://www.cnblogs.com/meilong/p/duanuuid-sheng-cheng.html
Copyright © 2011-2022 走看看