Random string generation with upper case letters and digits

Random string generation with upper case letters and digits

技术背景

在Python编程中,经常需要生成包含大写字母和数字的随机字符串,例如生成随机密码、验证码、唯一标识符等。Python提供了多种方法来实现这一需求,不同的方法在性能、安全性和易用性上有所差异。

实现步骤

1. 使用 random 模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import string
import random

# 简单的单行实现
N = 6
result = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))
print(result)

# 封装成函数
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))

print(id_generator())
print(id_generator(3, "6793YUIO"))
PYTHON

2. 使用 random.choices()(Python 3.6+)

1
2
3
4
5
6
import string
import random

N = 6
result = ''.join(random.choices(string.ascii_uppercase + string.digits, k=N))
print(result)
PYTHON

3. 安全版本:使用 random.SystemRandom()

1
2
3
4
5
6
import string
import random

N = 6
result = ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(N))
print(result)
PYTHON

4. 使用 secrets 模块(Python 3.6+)

1
2
3
4
5
6
7
import string
import secrets

N = 6
alphabet = string.ascii_uppercase + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(N))
print(password)
PYTHON

5. 使用 uuid 模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import uuid

# 单行实现
result = uuid.uuid4().hex.upper()[0:6]
print(result)

# 封装成函数
def my_random_string(string_length=10):
random = str(uuid.uuid4())
random = random.upper()
random = random.replace("-", "")
return random[0:string_length]

print(my_random_string(6))
PYTHON

6. 使用 strgen 模块

1
2
3
4
5
6
7
8
9
10
11
12
13
from strgen import StringGenerator as SG

# 生成6字符随机字符串
result = SG("[\u\d]{6}").render()
print(result)

# 获取唯一列表
unique_list = SG("[\l\d]{10}").render_list(5, unique=True)
print(unique_list)

# 保证字符串中有一个特殊字符
result_with_special = SG("[\l\d]{10}&[\p]").render()
print(result_with_special)
PYTHON

7. 使用 numpy 模块

1
2
3
4
5
6
7
import numpy as np
import string

length = 16
a = np.random.choice(list(string.ascii_uppercase + string.digits), length)
result = ''.join(a)
print(result)
PYTHON

核心代码

以下是几种常用方法的核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# random模块简单实现
import string
import random

def simple_random_string(N):
return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))

# secrets模块安全实现
import string
import secrets

def secure_random_string(N):
alphabet = string.ascii_uppercase + string.digits
return ''.join(secrets.choice(alphabet) for i in range(N))
PYTHON

最佳实践

  • 安全性要求高的场景:使用 secrets 模块或 random.SystemRandom(),它们提供了更安全的随机数生成。
  • 性能要求高的场景:对于短字符串,random.choices() 性能较好;对于长字符串,可以考虑使用 numpy.random.choice()
  • 代码简洁性:如果只是简单生成随机字符串,使用 random 模块的单行实现即可;如果需要更多定制,如生成唯一字符串、保证特定字符存在等,可以封装成函数。

常见问题

1. 生成的字符串可能不包含数字或大写字母

某些方法生成的字符串可能只包含数字或只包含大写字母。可以使用 secrets 模块结合逻辑判断来保证字符串中同时包含数字和大写字母。

2. 性能问题

对于大规模随机字符串生成,某些方法可能性能较低。可以通过测试不同方法的性能,选择最合适的方法。

3. 重复问题

某些方法可能会生成重复的字符串。可以使用 set 来存储已生成的字符串,避免重复。


Random string generation with upper case letters and digits
https://119291.xyz/posts/random-string-generation-with-upper-case-letters-and-digits/
作者
ww
发布于
2025年5月26日
许可协议