Python 自定义随机字符串

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)

猜你喜欢

转载自blog.csdn.net/qq_33668011/article/details/82111670