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读取html中指定元素生成excle文件示例
Apr 03 Python
Python实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
详解Python函数式编程—高阶函数
Mar 29 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
如何利用Python写个坦克大战
Nov 18 Python
python中操作文件的模块的方法总结
Feb 04 Python
python中Pexpect的工作流程实例讲解
Mar 02 Python
教你怎么用python实现字符串转日期
May 24 Python
使用pipenv管理python虚拟环境的全过程
Sep 25 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验证码代码
2012/02/27 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
JS 类型转换常见方法小结
2010/05/31 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
javascript 回调函数详解
2014/11/11 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
Python程序设计入门(5)类的使用简介
2014/06/16 Python
17个Python小技巧分享
2015/01/23 Python
python中模块查找的原理与方法详解
2017/08/11 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
python求最大连续子数组的和
2018/07/07 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
销售文员岗位职责
2013/11/29 职场文书
自我评价格式
2014/01/06 职场文书
县优秀教师事迹材料
2014/01/31 职场文书
普通党员对照检查材料
2014/08/28 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫
MySQL数据库 安全管理
2022/05/06 MySQL
SQL Server中锁的用法
2022/05/20 SQL Server
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers