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中对象的引用与复制代码示例
Dec 04 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
详解Numpy中的广播原则/机制
Sep 20 Python
python将一组数分成每3个一组的实例
Nov 14 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
Python使用多进程运行含有任意个参数的函数
May 02 Python
Python 创建TCP服务器的方法
Jul 28 Python
如何在Python中创建二叉树
Mar 30 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
php简单的会话类代码
2011/08/08 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
jquery创建div 实现代码
2009/04/27 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
python Django中models进行模糊查询的示例
2019/07/18 Python
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Python os模块常用方法和属性总结
2020/02/20 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
html5 学习简单的拾色器
2010/09/03 HTML / CSS
实习生个人的自我评价
2013/12/08 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
销售顾问工作计划书
2014/08/15 职场文书
个人求职信格式范文
2015/03/20 职场文书
英文慰问信范文
2015/03/24 职场文书
个人借条范本
2015/05/25 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android