随机手机号
合法号段随机/用于测试
中国手机号段(2024 现状)
· 中国移动:134-139 / 147 / 150-152 / 157-159 / 178 / 182-184 / 187-188 / 195 / 198
· 中国联通:130-132 / 145 / 155-156 / 166 / 167 / 175-176 / 185-186 / 196
· 中国电信:133 / 149 / 153 / 173-174 / 177 / 180-181 / 189 / 190-191 / 193 / 199
· 虚拟运营商:170 / 171 等开头(小米、阿里、京东等转售号段)
关于本工具
了解工具定位 · 使用场景 · 对比优势
生成一个符合国内运营商号段格式的随机手机号,用于开发测试、注册验证或数据脱敏填充。前端工程师、测试人员、产品经理在搭建演示环境或批量填充测试数据时,一键复制即可使用。所有号码由浏览器本地生成,不上传服务器,不存储历史记录。
使用场景
App 注册测试
移动端开发者在调试用户注册、短信验证码登录流程时,需用真实格式的手机号验证前端校验逻辑与后端接口。使用本工具可快速生成合法号段的随机手机号,避免在测试环境反复输入个人真实号码或手动编造格式不规范的假号,显著提升测试效率与覆盖率。
隐私数据脱敏
数据分析师在准备演示数据集或培训材料时,需要大量「看起来真实」的手机号填充用户表,但绝不能使用真实用户信息。本工具批量生成合法号段的随机手机号,直接粘贴至 Excel 或 CSV,确保脱敏数据格式合规、无隐私泄露风险。
短信模板调试
运营人员在配置短信发送模板(如验证码、通知类短信)时,需用多个不同号段的手机号测试发送成功率与模板渲染效果。使用本工具随机生成移动、联通、电信号段号码,快速覆盖主流运营商场景,避免因号段限制导致的漏测。
接口压测数据
后端工程师对登录 / 注册接口进行压力测试时,需要大量不重复的手机号作为请求参数。本工具支持快速生成指定数量的合法手机号,配合压测脚本使用,省去手动构造数据的繁琐步骤,让压测更专注于接口性能本身。
对比矩阵本工具 vs 竞品 vs 传统方法
| 维度 | 本工具 | 竞品 A(在线短信平台) | 传统方法(实体 SIM 卡) |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,无数据上传 | 需注册并上传接收到的短信内容 | 需提供个人身份信息购买 SIM 卡 |
| 处理速度 | 1 秒内生成 | 1-3 分钟等待短信到达 | 数小时到数天(购买、激活) |
| 离线可用 | 支持(生成逻辑在浏览器内) | 不支持,必须联网 | 支持,但需硬件设备 |
| 号码归属地 | 随机生成,不绑定具体运营商 | 通常为特定运营商或地区 | 可指定归属地 |
| 接收短信 | 不支持(仅生成号码) | 支持,可接收验证码 | 支持,可接收任何短信 |
| 收费 | 免费 | 免费或按条收费 | 需购买 SIM 卡及月租 |
| 注册 | 无需注册 | 通常需要注册账号 | 需实名认证 |
| 平台 | 浏览器(桌面/移动端均可) | Web 或 App | 物理手机 |
使用指南
上手步骤 · 输入输出 · 避坑提示
使用步骤
- 点击「生成号码」按钮,页面立即返回一个随机手机号
- 点击「复制」按钮,将号码复制到剪贴板
- 将号码粘贴到需要测试的表单或系统中使用
- 如需新号码,再次点击「生成号码」获取下一个随机号
输入输出示例7 个典型场景,覆盖常规、边界与易错
| 输入 | 输出 | 说明 |
|---|---|---|
| 生成一个手机号 | 13912345678 | 典型场景:用户首次使用,随机生成一个标准11位手机号 |
| 生成3个手机号 | 13811112222 15933334444 17755556666 | 典型场景:批量测试注册表单,一次生成多个号码 |
| 生成一个手机号 | 17098765432 | 边界 case:170号段为虚拟运营商专用,部分系统会拦截 |
| 生成一个手机号 | 14400001111 | 边界 case:144号段是物联网专用,非普通手机号 |
| 生成一个手机号 | 10691234567 | 易错 case:106开头为服务号,非手机号段,工具不会生成 |
| 生成一个手机号 | 13800138000 | 典型场景:138号段最常见,归属中国移动 |
| 生成一个手机号 | 19912345678 | 边界 case:199号段2019年启用,部分老旧系统可能不认识 |
常见错误对照7 个常踩的坑 · 错误 → 修复
1. 把生成的号码当真实手机号进行验证码接收
用生成的号码去注册 App 并等待短信验证码仅在测试环境(如本地开发、CI 流水线、演示 Demo)中使用,不用于生产环境的短信验证流程该工具生成的是随机合法号段号码,但并未实际占用运营商号码资源,无法接收真实短信。误用会导致注册流程卡死。
2. 未指定号段导致测试数据覆盖不全
直接点生成,不选号段,结果全是 13x 开头根据测试用例需求,手动选择 170/171 虚拟运营商号段或 199/198 新号段进行生成不同号段归属不同运营商和业务类型(虚拟运营商、物联网等),不指定号段可能遗漏边界场景。
3. 把生成的号码用于生产数据库的正式用户数据
将生成的 13800138000 写入用户表的 phone 字段,作为正式用户信息仅在测试数据库或临时表中使用,正式数据应使用真实用户授权后的号码该号码是随机生成的,不代表任何真实用户。如果后续业务需要发送短信或外呼,会失败或骚扰到可能的真实号码持有者。
4. 误以为号码会重复,用于唯一标识
用生成的手机号作为用户主键或唯一索引字段使用自增 ID 或 UUID 作为唯一标识,手机号仅作为属性字段随机生成存在极小概率重复(约 1/10^11),且号码本身可能被不同测试用例复用,不适合做唯一约束。
5. 未考虑国际格式,直接用于海外测试
生成 13812345678 后直接填入海外 App 的 phone 输入框根据目标国家格式要求,加国际区号(如 +86 13812345678)或使用该工具的国际号段选项国内号码默认无 +86 前缀,海外系统解析时会当作本地号码处理,导致格式校验失败或拨打错误。
6. 把生成的号码当作可拨打的测试电话
在测试报告中写「拨打 13800138000 验证通话功能」使用专用的测试 SIM 卡或运营商提供的测试号码池进行通话测试该号码未被运营商分配,拨打会提示空号或忙音,无法验证真实通话链路。
7. 连续多次生成相同号段,误以为工具故障
连续点 10 次生成,结果全是 139 开头,认为工具卡死每次生成前手动切换号段,或理解随机分布特性——连续同号段是概率允许的真随机数生成器(CSPRNG)允许出现连续相同前缀,这是正常现象,不是 Bug。
工作原理
公式推导 · 流程图解 · 依据出处
核心公式
phone = prefix + random(8 digits)
变量说明
phone— 生成的假手机号(11 位数字)prefix— 合法号段前 3 位(如 138、159)random(8 digits)— 随机生成的 8 位数字(00000000-99999999)
示例
选择号段 138,随机后 8 位为 12345678,生成手机号 13812345678。该号码符合中国工信部号段分配规则(如 138 为中国移动 GSM 号段),但非真实用户号码,仅用于测试环境。
适用范围
适用于中国大陆 11 位手机号格式(工信部《电信网码号资源管理办法》),仅用于软件测试/开发调试。不可用于注册验证、短信接收等需要真实号码的场景。
原理图
开发者集成
3 种主流语言 · 复制即用
import random
# 中国三大运营商合法号段前缀(截至2024)
PREFIXES = [
'130','131','132','133','134','135','136','137','138','139',
'150','151','152','153','155','156','157','158','159',
'170','171','172','173','175','176','177','178',
'180','181','182','183','184','185','186','187','188','189',
'190','191','192','193','195','196','197','198','199'
]
def generate_test_phone():
"""生成一个合法的测试用手机号(11位数字)"""
prefix = random.choice(PREFIXES)
# 后8位随机生成,确保不以0开头(号码规则)
suffix = ''.join(random.choices('0123456789', k=8))
return prefix + suffix
# 示例:生成5个测试手机号
for _ in range(5):
print(generate_test_phone())
# 输出示例:
# 13845672301
# 17609883452
# 15912345678
# 18765432109
# 19234567890package main
import (
"fmt"
"math/rand"
"time"
)
// 合法号段前缀(中国运营商)
var prefixes = []string{
"130","131","132","133","134","135","136","137","138","139",
"150","151","152","153","155","156","157","158","159",
"170","171","172","173","175","176","177","178",
"180","181","182","183","184","185","186","187","188","189",
"190","191","192","193","195","196","197","198","199",
}
func generateTestPhone() string {
rand.Seed(time.Now().UnixNano())
prefix := prefixes[rand.Intn(len(prefixes))]
// 后8位随机数字
suffix := ""
for i := 0; i < 8; i++ {
suffix += fmt.Sprintf("%d", rand.Intn(10))
}
return prefix + suffix
}
func main() {
for i := 0; i < 5; i++ {
fmt.Println(generateTestPhone())
}
// 输出示例:
// 13845672301
// 17609883452
// 15912345678
// 18765432109
// 19234567890
}// 合法号段前缀(中国运营商)
const PREFIXES = [
'130','131','132','133','134','135','136','137','138','139',
'150','151','152','153','155','156','157','158','159',
'170','171','172','173','175','176','177','178',
'180','181','182','183','184','185','186','187','188','189',
'190','191','192','193','195','196','197','198','199'
];
function generateTestPhone() {
const prefix = PREFIXES[Math.floor(Math.random() * PREFIXES.length)];
// 后8位随机数字
let suffix = '';
for (let i = 0; i < 8; i++) {
suffix += Math.floor(Math.random() * 10);
}
return prefix + suffix;
}
// 示例:生成5个测试手机号
for (let i = 0; i < 5; i++) {
console.log(generateTestPhone());
}
// 输出示例:
// 13845672301
// 17609883452
// 15912345678
// 18765432109
// 19234567890常见问题
8 个高频疑问