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检测网页是否有日常链接
Jun 03 Python
Python编程django实现同一个ip十分钟内只能注册一次
Nov 03 Python
python将文本中的空格替换为换行的方法
Mar 19 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
May 25 Python
Python新手如何理解循环加载模块
May 29 Python
浅析Python __name__ 是什么
Jul 07 Python
Python爬虫获取豆瓣电影并写入excel
Jul 31 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
python 检测nginx服务邮件报警的脚本
Dec 31 Python
Python Pandas常用函数方法总结
Jun 15 Python
对象析构函数__del__在Python中何时使用
Mar 22 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实现jQuery扩展函数
2009/10/30 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
Yii框架登录流程分析
2014/12/03 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
js实现筛选功能
2020/11/24 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
Python使用MD5加密字符串示例
2014/08/22 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
使用python远程操作linux过程解析
2019/12/04 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
Oracle性能调优原则
2012/05/03 面试题
小学关爱留守儿童活动方案
2014/08/25 职场文书
2014年服务员工作总结
2014/11/18 职场文书
新员工入职感想
2015/08/07 职场文书
导游词之潮音寺
2019/09/26 职场文书
Java设计模式之代理模式
2022/04/22 Java/Android
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS
Win10玩csgo闪退如何解决?Win10玩csgo闪退的解决方法
2022/07/23 数码科技