#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
随机串口号生成器
用法: python script.py [长度] [数量]
示例: python script.py 12 5 # 生成5个长度为12的随机串
"""
import random
import string
import sys
# --- 配置区 (可修改) ---
# 默认字符集: 大小写字母和数字(去掉易混淆的字符 O,0,I,1,l)
DEFAULT_CHARSET = string.ascii_letters + string.digits
# 如果希望包含特殊符号,取消下面一行的注释
# DEFAULT_CHARSET = string.ascii_letters + string.digits + string.punctuation
# 如果希望严格保证包含数字和字母,可以将下面的标志设为True
GUARANTEE_MIXED = True
# 默认长度和数量
DEFAULT_LENGTH = 16
DEFAULT_COUNT = 1
# ----------------------
def generate_serial(length: int, charset: str | list[str], guarantee: bool = False) -> str:
"""
生成一个随机串。
:param length: 串的长度
:param charset: 字符集(字符串或字符列表)
:param guarantee: 是否保证包含至少一个字母和一个数字
:return: 随机串
"""
if length <= 0:
raise ValueError("长度必须大于0")
# 如果要求保证混合且字符集同时包含字母和数字,则至少需要2个字符
if guarantee and length < 2:
raise ValueError("如果要求包含字母和数字,长度至少为2")
# 保证混合时,先随机挑选一个字母和一个数字的位置
if guarantee:
# 过滤出字母和数字子集(注意:数字可能包含在letters里,但这里以str判断)
letters = [c for c in charset if c.isalpha()]
digits = [c for c in charset if c.isdigit()]
if not letters or not digits:
raise ValueError("字符集必须同时包含字母和数字才能保证混合")
# 随机选一个字母和一个数字,并决定它们的位置
parts = [''] * length
pos_letter = random.randrange(length)
pos_digit = random.randrange(length)
while pos_digit == pos_letter: # 确保不同位置
pos_digit = random.randrange(length)
parts[pos_letter] = random.choice(letters)
parts[pos_digit] = random.choice(digits)
# 剩余的位置随机填充
for i in range(length):
if parts[i] == '':
parts[i] = random.choice(charset)
return ''.join(parts)
else:
# 直接随机生成
return ''.join(random.choices(charset, k=length))
def main():
# 解析命令行参数
length = DEFAULT_LENGTH
count = DEFAULT_COUNT
if len(sys.argv) > 1:
try:
length = int(sys.argv[1])
except ValueError:
print(f"警告: 长度参数 '{sys.argv[1]}' 无效,使用默认长度 {DEFAULT_LENGTH}")
length = DEFAULT_LENGTH
if len(sys.argv) > 2:
try:
count = int(sys.argv[2])
except ValueError:
print(f"警告: 数量参数 '{sys.argv[2]}' 无效,使用默认数量 {DEFAULT_COUNT}")
count = DEFAULT_COUNT
print(f"生成 {count} 个长度为 {length} 的随机串:")
for i in range(count):
print(generate_serial(length, DEFAULT_CHARSET, GUARANTEE_MIXED))
if __name__ == "__main__":
main()
使用说明
运行方法:

- 将脚本保存为
serial_gen.py - 在终端执行:
python serial_gen.py 12 5
(生成5个长度为12的串口号)
配置修改(在脚本顶部的“配置区”调整):
DEFAULT_CHARSET:更换字符集(例如添加string.punctuation以包含特殊符号)GUARANTEE_MIXED:设为True时,确保每个串号同时包含字母和数字(更安全)DEFAULT_LENGTH/DEFAULT_COUNT:修改默认参数
输出示例(长度为16,数量3):
aK7xQm3ZtLw9Rf2B
NpD8vHs4YcE5tUjG
Fb6WdXc1JrA3sKpL
如需生成Windows产品密钥格式(如 XXXXX-XXXXX-XXXXX),或需要排除易混淆字符,请在回复中告诉我,我可以为您调整版本。