summaryrefslogtreecommitdiff
path: root/support/ui_utils/random_name.py
blob: e22922a9bea89d4e78a8cede258a9e0c27d85562 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
import random
import string
import time
import datetime

class RandomName:
    """
    生成随机使用名称
    """
    def __init__(self, pro_name="test_uitemp", r_letter_count=8, r_number_count=8):
        self.pro_name = pro_name
        self.r_letter_count = r_letter_count
        self.r_number_count = r_number_count

    def random_name(self, source_name="", is_none = False):
        # 如果有sourceName内容则按source_name输出32位组长度输出字符串
        if source_name != "":
            if source_name.isalnum():   # 字母或数组
                source_name_len = len(source_name)
                count_half = int(source_name_len / 2)
                if source_name_len <= 14:
                    r_name = self.random_letter(count=source_name_len)
                else:
                    letters = self.random_letter(count=count_half)
                    numbers = self.random_number(count=count_half)
                    format_time = self.current_time()
                    r_name_1 = f"{self.pro_name}_{format_time}_{letters}_{numbers}"
                    r_name = r_name_1[:source_name_len]
            else:      # 含有其它非字母、数字字符
                r_name = "{}_{}_{}".format(self.pro_name, source_name, self.current_time())
        else:  # 如果无sourceName内容则输出32位组合长度
            letters = self.random_letter(self.r_letter_count)
            numbers = self.random_number(self.r_number_count)
            format_time = self.current_time()
            r_name = f"{self.pro_name}_{letters}_{numbers}_{format_time}"
            if is_none == True:
                r_name = ""
        return r_name

    def random_letter(self, count=8):
        temp_list = []
        for i in range(count):
            temp_list.append(random.choice(string.ascii_letters))
        r_letter = "".join(temp_list)
        return r_letter

    def random_number(self, count=8):
        temp_list = []
        for i in range(count):
            temp_list.append(random.choice(string.digits))
        r_number = "".join(temp_list)
        return r_number

    def random_phone(self, count=8):
        temp_list = []
        for i in range(count):
            temp_list.append(random.choice(string.digits))
        r_number = "".join(temp_list) + "*"
        return r_number

    def random_ipv4(self):
        ipv4_value = ".".join(str(random.randint(1, 255)) for _ in range(4))
        return ipv4_value

    def random_ipv6(self):
        ipv6 = []
        for i in range(8):
            segment = ''.join(random.choice("0123456789abcdef") for _ in range(4))
            ipv6.append(segment)
        ipv6_value = ":".join(ipv6)
        return ipv6_value

    def random_ipv4_or_ipv6(self):
        if random.random() > 0.2:
            ip = self.random_ipv4()
        else:
            ip = self.random_ipv6()
        return ip

    def random_url(self, length=5):
        letters = string.ascii_lowercase + string.digits
        abc = ''.join(random.choice(letters) for i in range(length)) + '.' + ''.join(
            random.choice(letters) for i in range(2))
        random_type_code = random.randint(0, 3)
        if random_type_code == 0:
            return '*{}'.format(abc)
        elif random_type_code == 1:
            return '{}*'.format(abc)
        elif random_type_code == 2:
            return '{}'.format(abc)
        elif random_type_code == 3:
            return '${}'.format(abc)
        else:
            return '{}'.format(abc.split(".")[0])

    def random_url_4_categories(self, length=8):
        letters = string.ascii_lowercase + string.digits
        abc = ''.join(random.choice(letters) for i in range(length)) + '.' + ''.join(
            random.choice(letters) for i in range(3))
        random_type_code = random.randint(0, 1)
        if random_type_code == 0:
            return '*{}'.format(abc)
        elif random_type_code == 1:
            return '${}'.format(abc)

    def random_account(self, length=8):
        letters = string.ascii_lowercase + string.digits
        abc = ''.join(random.choice(letters) for i in range(length))
        random_type_code = random.randint(0, 3)
        if random_type_code == 0:
            return '*{}'.format(abc)
        elif random_type_code == 1:
            return '{}*'.format(abc)
        elif random_type_code == 2:
            return '{}'.format(abc)
        elif random_type_code == 3:
            return '${}'.format(abc)

    def random_interval(self):
        low_boundary = 0
        up_boundary = 2 ** 31
        size = 2  # 选取两个数值
        random_interval = random.sample(range(low_boundary, up_boundary),
                                        size)  # 从[low_boundary, up_boundary)的序列中随机选择两个不重复的元素,返回列表
        return sorted(random_interval)

    def random_flag(self):
        flag_name_code = [i for i in range(1, 17)]
        flag_value_code = [0, 1]
        r_flag_name_code = str(random.choice(flag_name_code))
        r_flag_value_code = str(random.choice(flag_value_code))
        return r_flag_name_code + ":" + r_flag_value_code

    def current_time(self):
        c_time = time.time()
        formatted_time = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d-%H-%M-%S')
        return formatted_time

    def ip_to_int(self, ip):
        parts = [int(part) for part in ip.split('.')]
        return parts[0] * 256 ** 3 + parts[1] * 256 ** 2 + parts[2] * 256 + parts[3]

    def random_tunnel(self):
        start_ip = "10.0." + ".".join(str(random.randint(0, 255)) for _ in range(2))
        end_ip = "10.0." + ".".join(str(random.randint(0, 255)) for _ in range(2))
        if self.ip_to_int(start_ip) > self.ip_to_int(end_ip):
            start_ip, end_ip = end_ip, start_ip
        return start_ip + "-" + end_ip

    def random_apns(self, length=5):
        letters = string.ascii_lowercase + string.digits
        abc = ''.join(random.choice(letters) for i in range(length)) + '.' + ''.join(
            random.choice(letters) for i in range(2))
        random_type_code = random.randint(0, 3)
        if random_type_code == 0:
            return '*{}'.format(abc)
        elif random_type_code == 3:
            return '${}'.format(abc)
        else:
            return '*{}'.format(abc)

    def random_name_by_source(self, source_name="", source_letter=""):
        r_name = ""
        # 如果有sourceName内容则按source_name长度输出字符串,且字符在source_letter中
        if source_name != "":
            source_name_len = len(source_name)
            r_name = self.generate_code(length=source_name_len, chart_parttern=source_letter)
            if source_name_len > 32:
                letters = self.random_letter(self.r_letter_count)
                format_time = self.current_time()
                r_name = f"{self.pro_name}_{letters}_{format_time}_{r_name}"
                r_name = r_name[:source_name_len]

        else:  # 如果无sourceName内容则输出32位组合长度
            letters = self.random_letter(self.r_letter_count)
            numbers = self.random_number(self.r_number_count)
            format_time = self.current_time()
            r_name = f"{self.pro_name}_{letters}_{numbers}_{format_time}"
        return r_name

    def generate_code(self, length=4, chart_parttern=""):
        code1 = ""
        # str_pattern = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~\t\n\r\x0b\x0c'
        str_pattern = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"
        if chart_parttern != "":
            str_pattern = chart_parttern
        for _ in range(0, length):
            code1 = code1 + str_pattern[random.randint(0, len(str_pattern) - 1)]
        return code1
    
    def rand_password(self,min_length=8,max_length=16,password_strength=2, chart_parttern=""):
        password = ""
        if password_strength > 4:
            password_strength = 4
        if password_strength == 2:
            min_length = 8
        elif password_strength == 3:
            min_length = 10
        elif password_strength == 4:
            min_length = 12
        password_length = random.randint(min_length,max_length)
        str_pattern = ""
        #str_pattern = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~\t\n\r\x0b\x0c'
        list = ["0123456789", "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "~!@#$%^&*_.?"]
        list_sub = random.sample(list, password_strength)
        for var in list_sub:
            str_pattern += str(var)
        if chart_parttern != "":
            str_pattern = chart_parttern
        for _ in range(0, password_length):
            password = password + str_pattern[random.randint(0, len(str_pattern) - 1)]
        if password_strength > 1 and password.isalpha():
            passowrd = self.rand_password(min_length=min_length,max_length=max_length,password_strength=password_strength, chart_parttern=chart_parttern)
        return password