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检测一个对象是否为字符串类的方法
May 21 Python
python实现的文件同步服务器实例
Jun 02 Python
浅谈Python中的作用域规则和闭包
Mar 20 Python
django admin 后台实现三级联动的示例代码
Jun 22 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
python 画二维、三维点之间的线段实现方法
Jul 07 Python
Python二维码生成识别实例详解
Jul 16 Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 Python
python实现的汉诺塔算法示例
Oct 23 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 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中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
对pandas中apply函数的用法详解
2018/04/10 Python
python实现log日志的示例代码
2018/04/28 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
深入学习python多线程与GIL
2019/08/26 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
物流仓储计划书
2014/01/10 职场文书
国培计划培训感言
2014/03/11 职场文书
生日宴会策划方案
2014/06/03 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
世界地球日活动总结
2015/02/09 职场文书
对公司的意见和建议
2015/06/04 职场文书
跑吧孩子观后感
2015/06/10 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis