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 25 Python
Python中使用动态变量名的方法
May 06 Python
Python兔子毒药问题实例分析
Mar 05 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
Jul 27 Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 Python
python截取两个单词之间的内容方法
Dec 25 Python
浅谈Python爬虫基本套路
Mar 25 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 Python
Python+Tkinter制作专属图形化界面
Apr 01 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截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
PHP调用其他文件中的类
2018/04/02 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
js Dialog 实践分享
2012/10/22 Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
2013/12/13 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
Python错误的处理方法
2020/06/23 Python
python中id函数运行方式
2020/07/03 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
Java语言程序设计测试题选择题部分
2014/04/03 面试题
保险公司开门红口号
2014/06/21 职场文书
组工干部对照检查材料
2014/08/25 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
介绍信怎么写
2015/01/30 职场文书
客房领班岗位职责
2015/02/11 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
python中的装饰器该如何使用
2021/06/18 Python