Python 生成短8位唯一id实战教程


Posted in Python onJanuary 13, 2021

测试环境:

Win10

Python 3.5.4

实现思路

利用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 -*- 
'''
@CreateTime: 2020/07/14 11:04
@Author : shouke
''' 
import uuid
array = [ "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("-", '') # 注意这里需要用uuid4
  buffer = []
  for i in range(0, 8):
    start = i * 4
    end = i * 4 + 4
    val = int(id[start:end], 16)
    buffer.append(array[val % 62])
  return "".join(buffer)

测试验证

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 += 1
    index.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 生成短8位唯一id实战教程

补充:用python随机生成以2019开头的10个8位数的学号

import random意思是引入内置模块random,j代表着

行数,range()是一个随机生成数字的函数,i控制着

每行的个数,str()表示是转化为字符串的类型

Python 生成短8位唯一id实战教程

Python 生成短8位唯一id实战教程

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
python简单读取大文件的方法
Jul 01 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
django进阶之cookie和session的使用示例
Aug 17 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
python 对字典按照value进行排序的方法
May 09 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
python 实现视频 图像帧提取
Dec 10 Python
python实现的Iou与Giou代码
Jan 18 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
零基础学python应该从哪里入手
Aug 11 Python
python uuid生成唯一id或str的最简单案例
Jan 13 #Python
全网最全python库selenium自动化使用详细教程
Jan 12 #Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 #Python
五分钟学会怎么用python做一个简单的贪吃蛇
Jan 12 #Python
python生成word合同的实例方法
Jan 12 #Python
python中常用的数据结构介绍
Jan 12 #Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 #Python
You might like
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
Js+Jq获取URL参数的集中方法示例代码
2014/05/20 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
大学生个人简历中的自我评价
2013/12/27 职场文书
战略合作协议书范本
2014/04/18 职场文书
战友聚会致辞
2015/07/28 职场文书
高中军训感想
2015/08/07 职场文书
诚实守信主题班会
2015/08/13 职场文书
会计做账心得体会
2016/01/22 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
SQL Server中搜索特定的对象
2022/05/25 SQL Server
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers