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 简易计算器程序,代码就几行
Aug 29 Python
Python操作MySQL数据库的方法
Jun 20 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
Oct 31 Python
pymongo中group by的操作方法教程
Mar 22 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
Jun 05 Python
python实现日志按天分割
Jul 22 Python
利用python计算windows全盘文件md5值的脚本
Jul 27 Python
python用quad、dblquad实现一维二维积分的实例详解
Nov 20 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
Python-openCV开运算实例
Jul 05 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防注入安全代码
2008/04/09 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
python实现简单中文词频统计示例
2017/11/08 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
举例讲解Python常用模块
2019/03/08 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
python 绘制正态曲线的示例
2020/09/24 Python
python爬取抖音视频的实例分析
2021/01/19 Python
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
高中生的学习总结自我鉴定
2013/10/26 职场文书
财务部绩效考核方案
2014/05/04 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年采购工作总结
2014/11/20 职场文书
步步惊心观后感
2015/06/12 职场文书
安全责任协议书范本
2016/03/23 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers