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 相关文章推荐
详解Django中的过滤器
Jul 16 Python
老生常谈进程线程协程那些事儿
Jul 24 Python
django中的setting最佳配置小结
Nov 21 Python
python计算两个地址之间的距离方法
Jun 09 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
python3利用venv配置虚拟环境及过程中的小问题小结
Aug 01 Python
解决Python中回文数和质数的问题
Nov 24 Python
python框架flask入门之环境搭建及开启调试
Jun 07 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
Python计算信息熵实例
Jun 18 Python
python如何快速生成时间戳
Jul 21 Python
python+playwright微软自动化工具的使用
Feb 02 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知道与问问的采集插件代码
2010/10/12 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
php计算函数执行时间的方法
2015/03/20 PHP
一个简单的php路由类
2016/05/29 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
JS基础之undefined与null的区别分析
2011/08/08 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
使用Python开发windows GUI程序入门实例
2014/10/23 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
简单了解什么是神经网络
2017/12/23 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
对python函数签名的方法详解
2019/01/22 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
财政局长自荐信范文
2013/12/22 职场文书
中层竞聘演讲稿
2014/01/09 职场文书
清华大学自主招生自荐信
2014/01/29 职场文书
优秀毕业生自我鉴定
2014/02/11 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
数字化校园建设方案
2014/05/03 职场文书
学前班评语大全
2014/05/04 职场文书
鲁迅故里导游词
2015/02/05 职场文书
异地恋情人节寄语
2015/02/28 职场文书
Ajax实现三级联动效果
2021/10/05 Javascript