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的Django框架中的Context使用
Jul 15 Python
Python处理XML格式数据的方法详解
Mar 21 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
对python 判断数字是否小于0的方法详解
Jan 26 Python
python实现烟花小程序
Jan 30 Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
通过python3实现投票功能代码实例
Sep 26 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 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 动态执行带有参数的类方法
2009/04/10 PHP
Php Mssql操作简单封装支持存储过程
2009/12/11 PHP
深入php之规范编程命名小结
2013/05/15 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
JS分页效果示例
2013/10/11 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
win系统下nodejs环境安装配置
2017/05/04 NodeJs
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
微信小程序如何获取手机验证码
2018/11/04 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
Python实现接受任意个数参数的函数方法
2018/04/21 Python
python实现简易内存监控
2018/06/21 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
如何在python中实现随机选择
2019/11/02 Python
python中的django是做什么的
2020/07/31 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
联谊活动策划书
2014/01/26 职场文书
招商专员岗位职责
2014/02/08 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
董事长助理工作职责
2014/06/08 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python
Python道路车道线检测的实现
2021/06/27 Python