本文目录导读:

- 场景一:生成随机的、合法的、可用的手机号(用于测试)
- 场景二:生成连续的手机号(用于压力测试、模拟递增数据)
- 场景三:使用 Shell 脚本(Linux/Mac)快速生成
- 如何确保号码不重复?
- 扩展思路:生成指定运营商的号码(验证、测试)
- 为什么生成的号码可能是“无效”的?
- 工具推荐(无需写代码)
生成手机号码的脚本需要根据你的使用场景(如测试、数据分析、学习等)来设计,生成手机号的核心是生成符合中国电信运营商标识(号段)的11位数字。
下面提供几种不同场景下,使用 Python 和 Bash 生成手机号的脚本示例。
重要提示: 如果你是为了骚扰、注册垃圾账号、营销轰炸等非法目的,请不要使用这些代码,这是违法的。
生成随机的、合法的、可用的手机号(用于测试)
合法的手机号需要满足:前3位是真实的号段(如 139, 150, 186 等),中间4位是地区编码(可随机),最后4位是随机数字。
import random
# 真实的手机号号段(前三位或前四位)
# 联通、移动、电信 常见号段
phone_prefixes = [
"130", "131", "132", "133", "134", "135", "136", "137", "138", "139",
"150", "151", "152", "153", "155", "156", "157", "158", "159",
"166", "167",
"170", "171", "172", "173", "175", "176", "177", "178",
"180", "181", "182", "183", "184", "185", "186", "187", "188", "189",
"190", "191", "192", "193", "195", "196", "198", "199"
]
def generate_phone_number():
"""生成一个随机手机号"""
prefix = random.choice(phone_prefixes)
# 生成8位随机数字
suffix = ''.join(random.choices('0123456789', k=8))
return prefix + suffix
# 批量生成 100 个
print("生成的手机号列表:")
phone_numbers = [generate_phone_number() for _ in range(100)]
for i, phone in enumerate(phone_numbers, 1):
print(f"{i}. {phone}")
# 如果需要写入文件:
with open("phones.txt", "w") as f:
for phone in phone_numbers:
f.write(phone + "\n")
print("\n已写入 phones.txt 文件。")
生成连续的手机号(用于压力测试、模拟递增数据)
适合测试接口的防刷能力或模拟用户排队。
def generate_sequential_phones(start_prefix="138", start_suffix=10000000, count=50):
"""生成递增的手机号"""
phones = []
base = int(start_suffix)
for i in range(count):
suffix = str(base + i).zfill(8) # 8位数字,不足补零
phone = start_prefix + suffix
phones.append(phone)
return phones
# 从 13810000000 开始生成 50 个
phones = generate_sequential_phones("138", 10000000, 50)
for p in phones:
print(p)
使用 Shell 脚本(Linux/Mac)快速生成
适合极速小批量测试,不需要安装 Python 的环境。
#!/bin/bash
# 生成 10 个随机手机号
for i in {1..10}
do
# 从常见号段中随机选一个
prefix=("130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "150" "151" "152" "153" "155" "156" "157" "158" "159" "186" "187" "188")
random_prefix=${prefix[$RANDOM % ${#prefix[@]}]}
# 生成 8 位随机数字
suffix=$(printf "%08d" $((RANDOM * RANDOM % 100000000)))
echo "${random_prefix}${suffix}"
done
# 保存到文件
# ./generate.sh > phone_list.txt
如何确保号码不重复?
如果需要生成大量(如 10 万)且互不重复的号码,可以使用 set 数据结构。
import random
def generate_unique_phones(phone_set, count=1000):
"""生成不重复的号码"""
local_set = set()
while len(local_set) < count:
phone = generate_phone_number() # 复用上面的函数
if phone not in phone_set: # 排除全局已有的号
local_set.add(phone)
return list(local_set)
# 示例:生成 10 个不重复的
unique = generate_unique_phones(set(), 10)
print(unique)
扩展思路:生成指定运营商的号码(验证、测试)
# 只生成移动号段
mobile_prefixes = ["134", "135", "136", "137", "138", "139", "150", "151", "152", "157", "158", "159", "188", "187", "182", "183", "184", "178"]
def generate_mobile():
prefix = random.choice(mobile_prefixes)
suffix = ''.join(random.choices('0123456789', k=8))
return prefix + suffix
为什么生成的号码可能是“无效”的?
- 运营商未放号:很多号段虽然存在,但部分号码并未分配给用户。
- 无法接打电话:生成的号码大概率是空号,无法收到验证码,只能用来填充数据库、测试前端输入限制、做演示数据。
工具推荐(无需写代码)
如果你不会编程,可以使用在线网站生成,搜索“在线手机号生成器”,不过要注意输入输出格式,并且警惕隐私泄露风险。