1. 首页
  2. 后端
  3. python

python生成随机字符串

最近遇到python需要生成随机字符串,主要用来作为windows的密码。就写了一个比较通用的方法

支持传入长度,生成的字符串的元组

如 random_tuple=(string.ascii_letters, string.digits, “[()`~!@#$%^&-+=|{}[]:;’,.?/]”)

如果需要tuple中的所有元素,则把need_all_letter = True

随机算法不是很全面 概率逐渐递减 需要高频出现的字符串可放在random_tuple的前几个元素

第一个的随机范围为1 到 ( digit – 1)

第二个的为 1 到 (digit – 第一个 – len(tuple) -1)

…..

import string
import random


def create_random_str(digit=13, random_tuple=(string.ascii_letters, string.digits, "[()`~!@#$%^&-+=|{}[]:;',.?/]"),
                      need_all_letter=True):
    """
    随机字符串
    随机算法不是很全面 概率逐渐递减 需要高频出现的字符串可放在random_tuple的前几个元素
    :param digit: 位数 当need_all_letter为True时候, 不能小于random_tuple的长度
    :param random_tuple: 随机字符串组成的元祖
    :param need_all_letter: 是否需要random_tuple中的每一个元素
    :return: 一个digit位的随机字符串
    """
    try:
        digit = int(digit)
        pwd = []

        if digit < 1:
            raise ValueError('长度必须大于0')

        if need_all_letter is False:
            parents = ''.join(random_tuple)
            pwd = [random.choice(parents) for i in range(digit)]
            return ''.join(pwd)

        if digit < len(random_tuple):
            raise ValueError('参数必须大于%d' % len(random_tuple))

        number = digit
        random_tuple_len = len(random_tuple)
        for i in range(random_tuple_len):
            if i < (random_tuple_len - 1):
                number_random = random.randint(1, number - (random_tuple_len - i - 1))
                number = number - number_random
            else:
                number_random = number
            pwd = [random.choice(''.join(random_tuple[i])) for item in range(number_random)] + pwd
        random.shuffle(pwd)
        return ''.join(pwd)

    except Exception as e:
        print(e)
        raise e


a = create_random_str(random_tuple=(string.digits, 'sajchuadkasjdkjahkj'))

print(a)

原创文章,作者:itclubs,如若转载,请注明出处:https://www.itclubs.cn/?p=176

发表评论

登录后才能评论

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:843462167@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息