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实现设置windows桌面壁纸代码分享
Mar 28 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
Python subprocess模块详细解读
Jan 29 Python
Python 查找字符在字符串中的位置实例
May 02 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
Django的性能优化实现解析
Jul 30 Python
python获取Pandas列名的几种方法
Aug 07 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
Python3爬虫里关于代理的设置总结
Jul 30 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 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
php set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
发一个php简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
将string解析为json的几种方式小结
2010/11/11 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
javascript实现youku的视频代码自适应宽度
2015/05/25 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
node.js环境搭建图文详解
2018/09/19 Javascript
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
Python单元和文档测试实例详解
2019/04/11 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Python如何实现邮件功能
2020/05/27 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
科技之星事迹材料
2014/06/02 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
SQL中的连接查询详解
2022/06/21 SQL Server