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编写一个简单的tic-tac-toe游戏的教程
Apr 16 Python
Python的__builtin__模块中的一些要点知识
May 02 Python
python控制台中实现进度条功能
Nov 10 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 Python
python实现电子书翻页小程序
Jul 23 Python
python 经典数字滤波实例
Dec 16 Python
Python : turtle色彩控制实例详解
Jan 19 Python
图文详解matlab原始处理图像几何变换
Jul 09 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
PHP编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
JS 判断代码全收集
2009/04/28 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
Python日期操作学习笔记
2008/10/07 Python
Python中的文件和目录操作实现代码
2011/03/13 Python
python的id()函数介绍
2013/02/10 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
python去掉空白行的多种实现代码
2018/03/19 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
哪些是python中web开发框架
2020/06/17 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
仓库管理员岗位职责
2014/03/19 职场文书
服装仓管员岗位职责
2014/06/17 职场文书
地陪导游欢迎词
2015/01/26 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
心理学培训心得体会
2016/01/22 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
Python标准库之typing的用法(类型标注)
2021/06/02 Python
详解Python生成器和基于生成器的协程
2021/06/03 Python