版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33668011/article/details/82111670
本篇文章主要是:前段时间在工作需要创建多个随机密码:这个密码需要包含字母/数字/字符,当时就直接在使用的地方写了一个简单的随机方法,但是下去之后和同事进行了一下沟通,其实他们在平时的工作中也会用到一些随机字符串,最后就想着整理一个单独的类,可以进行各种类型字符串的随机生成。
简单描述一下这个类的基本满足需求:可以自定义随机一组字符串,自定义包含:1.类型:数字,大小写字母,字符,汉字(自定义组合);2.长度。
整体思路:1.定义不同类型的库(数字,大小写字母,字符,汉字);2.在更具想要的一个类型组合来合并现有的库,组成一个种子库;3.之后字符串的每个字符都随机的在这个种子库中进行随机获取;4.最后返回组成的字符串
1.定义多个不同类型的库(这里的库可以自行进行修改,补充)
self.Number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
self.Capital = ["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"]
self.Letter = ["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"]
self.Character = ["~", "!", "@", "#", "¥", "$", "%", "^", "&", "*", "(", ")", "_", "-", "+", "=", "{", "[", "]","}", ";", ":", "'", ",", ".", "/", "<", ">", "?", "~", "《", ">", "|", "”", "“"]
self.Strings = ["赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤","许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水","窦", "章", "暨", "居", "衡", "步", "都", "耿", "满", "弘", "云", "苏", "潘", "葛", "匡", "国", "文", "寇", "奚","范", "彭", "郎", "广", "禄", "阙", "东", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳","酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷", "罗", "毕", "郝", "邬", "安","常", "乐", "于", "时", "傅", "米", "贝", "明", "臧", "贾", "路", "娄", "危", "虞", "万", "支", "柯", "包", "诸","左", "石", "芮", "羿", "储", "靳", "皮", "卞", "齐", "康", "计", "伏", "成", "戴", "江", "童", "颜", "郭", "昝","管", "卢", "莫", "崔", "吉", "钮", "龚", "汲", "邴", "糜", "松", "伍", "余", "元", "卜", "谈", "宋", "茅", "庞","梅", "盛", "林", "刁", "经", "房", "裘", "缪", "程", "嵇", "邢", "滑", "井", "段", "富", "巫", "顾", "孟", "平","黄", "熊", "纪", "舒", "屈", "钟", "徐", "邱", "骆", "干", "解", "应", "宗", "裴", "陆", "荣", "翁", "乌", "焦","巴", "弓", "和", "穆", "萧", "尹", "项", "祝", "董", "梁", "高", "夏", "蔡", "田", "丁", "宣", "贲", "邓", "荀","羊", "於", "惠", "牧", "隗", "山", "谷", "姚", "邵", "湛", "汪", "杜", "阮", "蓝", "闵", "樊", "胡", "凌", "霍","郁", "单", "杭", "洪", "甄", "曲", "家", "封", "车", "侯", "宓", "蓬", "师", "巩", "厍", "聂", "晁", "勾", "敖"]
2.合并库:这里需要说明一下【string_type:是类型和,详细解释看源码】
def get_ty(self):
textType = self.String_type
length = int(self.String_length)
Text = [] # 随机种子库
randomText = ""
if (textType % 2) == 1: # 是否包含类型:1
Text = Text + self.Number
if (textType // 2) % 2 == 1: # 是否包含类型:2
Text = Text + self.Capital
if (textType // 4) % 2 == 1: # 是否包含类型:4
Text = Text + self.Letter
if (textType // 8) % 2 == 1: # 是否包含类型:8
Text = Text + self.Character
if (textType // 16) % 2 == 1: # 是否包含类型:16
Text = Text + self.Strings
3.随机一定长度的字符串
for le in range(length):
r = random.randint(0, Text.__len__() - 1)
te = Text[r]
randomText = str(te) + randomText
4.返回:需要使用两个参数(
:param string_type: 随机字符串类型:1.数字,2.大写字母,4.小写字母,8.字符,16.汉字
:param string_length: 随机字符串长度
)
整体源码如下:
import random
class random_text:
"""
返回随机数据:
"""
def __init__(self, string_type=31, string_length=6):
"""
自定义随机String :需要多种类型的使用加法
如:
数字+大写字母【1+2=3】
数字+大写字母+小写字母【1+2+4=7】
数字+大写字母+小写字母+字符【1+2+4+8=15】
数字+大写字母+小写字母+字符+汉字【1+2+4+8+16=31】
:param string_type: 随机字符串类型:1.数字,2.大写字母,4.小写字母,8.字符,16.汉字
:param string_length: 随机字符串长度
"""
self.String_type = string_type
self.String_length = string_length
self.Number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
self.Capital = ["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"]
self.Letter = ["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"]
self.Character = ["~", "!", "@", "#", "¥", "$", "%", "^", "&", "*", "(", ")", "_", "-", "+", "=", "{", "[", "]",
"}", ";", ":", "'", ",", ".", "/", "<", ">", "?", "~", "《", "》", "|", "”", "“"]
self.Strings = ["赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤",
"许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水",
"窦", "章", "暨", "居", "衡", "步", "都", "耿", "满", "弘", "云", "苏", "潘", "葛", "匡", "国", "文", "寇", "奚",
"范", "彭", "郎", "广", "禄", "阙", "东", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳",
"酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷", "罗", "毕", "郝", "邬", "安",
"常", "乐", "于", "时", "傅", "米", "贝", "明", "臧", "贾", "路", "娄", "危", "虞", "万", "支", "柯", "包", "诸",
"左", "石", "芮", "羿", "储", "靳", "皮", "卞", "齐", "康", "计", "伏", "成", "戴", "江", "童", "颜", "郭", "昝",
"管", "卢", "莫", "崔", "吉", "钮", "龚", "汲", "邴", "糜", "松", "伍", "余", "元", "卜", "谈", "宋", "茅", "庞",
"梅", "盛", "林", "刁", "经", "房", "裘", "缪", "程", "嵇", "邢", "滑", "井", "段", "富", "巫", "顾", "孟", "平",
"黄", "熊", "纪", "舒", "屈", "钟", "徐", "邱", "骆", "干", "解", "应", "宗", "裴", "陆", "荣", "翁", "乌", "焦",
"巴", "弓", "和", "穆", "萧", "尹", "项", "祝", "董", "梁", "高", "夏", "蔡", "田", "丁", "宣", "贲", "邓", "荀",
"羊", "於", "惠", "牧", "隗", "山", "谷", "姚", "邵", "湛", "汪", "杜", "阮", "蓝", "闵", "樊", "胡", "凌", "霍",
"郁", "单", "杭", "洪", "甄", "曲", "家", "封", "车", "侯", "宓", "蓬", "师", "巩", "厍", "聂", "晁", "勾", "敖"]
def get_f(self):
"""选定类型随机存在"""
textType = self.String_type
length = int(self.String_length)
Text = [] # 随机种子库
randomText = ""
if (textType % 2) == 1: # 是否包含类型:1
Text = Text + self.Number
if (textType // 2) % 2 == 1: # 是否包含类型:2
Text = Text + self.Capital
if (textType // 4) % 2 == 1: # 是否包含类型:4
Text = Text + self.Letter
if (textType // 8) % 2 == 1: # 是否包含类型:8
Text = Text + self.Character
if (textType // 16) % 2 == 1: # 是否包含类型:16
Text = Text + self.Strings
for le in range(length):
r = random.randint(0, Text.__len__() - 1)
te = Text[r]
randomText = str(te) + randomText
return randomText
def get_t(self):
"""选定类型必存在"""
textType = self.String_type
length = int(self.String_length)
randomText = ""
key = ""
if (textType % 2) == 1: # 是否包含类型:1
key = key + "1,"
if (textType // 2) % 2 == 1: # 是否包含类型:2
key = key + "2,"
if (textType // 4) % 2 == 1: # 是否包含类型:4
key = key + "4,"
if (textType // 8) % 2 == 1: # 是否包含类型:8
key = key + "8,"
if (textType // 16) % 2 == 1: # 是否包含类型:16
key = key + "16,"
keys = key.split(',')
le = keys.__len__() - 1
if (length % le) != 0:
le_le = (length // le) + 1
else:
le_le = (length // le)
for x in range(le_le):
for y in range(le):
te = ""
if keys[y] == "1":
r = random.randint(0, self.Number.__len__() - 1)
te = self.Number[r]
elif keys[y] == "2":
r = random.randint(0, self.Capital.__len__() - 1)
te = self.Capital[r]
elif keys[y] == "4":
r = random.randint(0, self.Letter.__len__() - 1)
te = self.Letter[r]
elif keys[y] == "8":
r = random.randint(0, self.Character.__len__() - 1)
te = self.Character[r]
elif keys[y] == "16":
r = random.randint(0, self.Strings.__len__() - 1)
te = self.Strings[r]
randomText = str(te) + randomText
return randomText[0:length]
if __name__ == '__main__':
for k in range(31):
text = random_text(k + 1, 10).get_f()
print(str(k + 1) + " ----- " + text)
for k in range(31):
text = random_text(k+1, 10).get_t()
print(str(k + 1) + " ----- " + text)