一、功能:
从指定字符集中随机生成字符串。
字符集包含:
- 大写字母(upper): ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’
- 小写字母(lower):‘abcdefghijklmnopqrstuvwxyz’
- 数字(digit): ‘0123456789’
- 符号(punct):r’’’!@#$%^&*’’’
二、代码
#!/usr/bin/python# -*- coding: utf-8 -*-import random
classRandomString:
chars ={'upper':'ABCDEFGHIJKLMNOPQRSTUVWXYZ','lower':'abcdefghijklmnopqrstuvwxyz','digit':'0123456789','punct':r'''!@#$%^&*''',}def__init__(self, length,*contents):
self.kinds ={}
self.length = length
iflen(contents)==0:
self.kinds =Noneelse:for content in contents[0]:
kind = content.split(':')[0]iflen(content.split(':'))==1:
self.kinds[kind]=0else:
self.kinds[kind]=int(content.split(':')[1])defcreate(self):
res =''
charset =''if self.kinds isNone:
charset =''.join(c for c in RandomString.chars.values())else:if self.length <sum(num for num in rs.kinds.values()):print('规则不符,生成失败。')else:for kind, num in rs.kinds.items():if num ==0:passelse:for i inrange(num):
res += random.choice(RandomString.chars[kind])
charset += RandomString.chars[kind]for i inrange(self.length -len(res)):
res += random.choice(charset)
str_list =list(res)
random.shuffle(str_list)return''.join(str_list)if __name__ =='__main__':
rs = RandomString(10)
rs.create()
三、用法:
1.实例化RandomString
rs = RandomString(length,*contents)
length:要生成的字符串总长度
contents:选择字符集以及某类字符最低数量(可选)
contents格式:[‘字符集1:最少个数’,‘字符集2:最少个数’,‘字符集3:最少个数’,‘字符集4:最少个数’]
最少个数可省略,默认为0。
2.生成字符串
rs.create()
四、实例
例1:生成16位随机字符串,默认选择所有字符集(大写字母、小写字母、数字、符号)
rs = RandomString(16)
rs.create()'wuYsV@*GWF3Nvj^L'
例2:生成由大写字母、小写字母、数字组成的4位字符串。
rs = RandomString(4,['upper','lower','digit'])
rs.create()'zmf4'
注意:如果不设置某字符集最少个数,最终生成的字符串中有概率不包含此类字符。
例3:生成由大写字母、小写字母、数字组成的4位字符串。其中各类字符都至少有1个。
rs = RandomString(4,['upper:1','lower:1','digit:1'])
rs.create()'Lx2d'
例4:生成由大写字母、小写字母、数字、符号组成的10位字符串。其中至少包含4个大写字母,3个小写字母,1个数字。
rs = RandomString(10,['upper:4','lower:3','digit:1','punct'])
rs.create()'3zM@oARWzS'
版权归原作者 rougutouer 所有, 如有侵权,请联系我们删除。