利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUID分成8组,每4个为一组,然后通过模62(字符0-9,a-z,A-Z总数量62个字符)操作,结果作为索引取出字符,这样重复率大大降低,实践测试,运行20000000次,仅出现2个重复id(仅测试过一次)。

当然,这样还达不到唯一id,因为还是有重复的。解决方法呢,可以考虑结合数据库、或者其它存储来实现,以结合数据库为例,我们可以新建一张数据库表,并给表设置一个id字段,并且设置为主键、或者增加唯一约束,每次获取8 id后,往表里插入一条数据,如果可以成功插入,说明不重复,否则说明是重复id,再次尝试获取。

核心代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-import uuidarray = [ "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","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 get_short_id():id = str(uuid.uuid4()).replace("-", '') # 注意这里需要用uuid4buffer = []for i in range(0, 8):start = i *  4end = i * 4 + 4val = int(id[start:end], 16)buffer.append(array[val % 62])return "".join(buffer)

测试验证

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
id_set = set() # 用于存放生成的唯一id
count = 0 # 用于统计出现重复的次数
index = [] # 记录第几次调用生成8位id出现重复
for i in range(0, 20000000):id = get_short_id()if id in id_set:count += 1index.append(str(i+1))else:id_set.add(id)print('id:%s, 运行第 %s 次, 重复数:%s , 重复率:%s, 出现重复次序 %s' % (id, i+1, count, count/(i+1)*100, ','.join(index)))

Python 基于Python生成短8位唯一id解决方案相关推荐

  1. 清明节 java_java生成12位唯一id 2013.3.12大三班清明节生成活动记录表.doc

    java生成12位唯一id 2013.3.12大三班清明节生成活动记录表 java生成12位唯一id 2013.3.12大三班清明节生成活动记录表 幼儿生成活动记录表 学期:二 0 一二学年度第二学期 ...

  2. 雪花算法及运用PHP,雪花算法生成全局唯一ID,参考了下网上雪花算法生成规则,机器ID和序列号自动获取 理论上毫秒可生成 1024*4096个唯一ID

    任务要求毫秒生成10000个唯一ID 研究了下twitter/snowflake的算法思想: 参考了下网上雪花算法生成规则,把数据中心和机器编号整合一起,变成10位机器ID, 机器ID和序列号自动获取 ...

  3. STM32F7xx —— 96位唯一ID

    STM32F7xx -- 96位唯一ID // 配置单片机型号 对外只有这个宏CONFIG_SYSTEM_HARDWARE_TYPE #define CONFIG_SYSTEM_HARDWARE_TY ...

  4. Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案

    Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案 参考文章: (1)Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案 (2)https://www.cnblogs.com/ ...

  5. UUID原理,以及JAVA生成短8位UUID

    最近需要生成短uuid,网上查了查资料,这里整理记录一下,供大家参考 1 前言 UUID,全名叫做 Universally Unique Identifier,也就是通用唯一标识符的意思.有时候,也叫 ...

  6. Python基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    转载地址:https://www.cnblogs.com/clarke/p/5752527.html 1.写在前面 抛转引玉,仅供参考 2.开发环境 win7 64位 JetBrains PyChar ...

  7. java uuid 第三方_JAVA生成短8位UUID

    java 原创,转载需注明. 短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个. 本算法利用62个可打印字符,通过随机生成32位UUID,由于UU ...

  8. python基于Python的资产管理系统毕业设计-附源码201117

    摘 要 现代企业管理越来越强调利用有形资产来提供优质服务的能力,即通过资产管理来确保有形资产物尽其用.安全运行,在希望的时间和地点提供需要的设备,同时尽可能地降低运行和维护成本.资产管理系统为企业提供 ...

  9. mysql 生成8位uuid_JAVA生成短8位UUID

    java 原创,转载需注明. 短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个. 本算法利用62个可打印字符,通过随机生成32位UUID,由于UU ...

最新文章

  1. Linux C 实现生产者消费者问题
  2. Django 基于角色的权限控制
  3. python框架怎么学_Python框架学习
  4. python plt.show_如何使用Python最大化plt.show()窗口
  5. SAP IDES各Client用途和用户名密码
  6. Flutter进阶—铅刀一割
  7. fl2440hello world模块驱动编写
  8. kdtree java_KdTree理解与实现(Java)
  9. Python实现对给定的列表中连续数字的寻找
  10. Windows系统下hosts文件工作原理
  11. xshell7,xftp7个人免费版官方下载,无需破解,免激活,下载即可使用
  12. 【ASP.NET】swfuplod图片上传
  13. 是时候更换你的无线路由器(wifi暴力破解)
  14. Java8 - 使用 Comparator.comparing 进行排序
  15. 13个创意爆棚的广告图片
  16. SwiftUI macOS 轻松搭建音乐Radio类App界面(教程含源码)
  17. k8s之pod和pod探针
  18. python实现双屏情况下,第二个屏播发视频
  19. 06-HTML5新增元素
  20. 企业级容器技术docker(12)docker swarm

热门文章

  1. 《Spring Boot官方文档》16. 自动配置
  2. 《转》python学习--基础上
  3. H5开发开发利器——flex
  4. 我们应该怀念爱因斯坦的五个原因
  5. 2014.11 总结
  6. 分享18个常用的网站性能测试工具
  7. 《暗时间》的笔记-我在南大的七年
  8. 恶心的C语言strtok函数
  9. SQL Server 2000查询n到m条记录
  10. 【Python】Flask 框架安装虚拟环境报错—处理中......