使用方法
- 在「生成条数」填 1~500 的整数(示例填 12),或直接点「重新生成」按默认 12 条产出。
- 点「重新生成」或在输入框按回车,表格被全新随机记录替换;首屏永远只渲染前 12 行。
- 数据超过 12 条时点「加载更多」每次追加 12 行,避免一次性塞入上千个单元格拖慢页面。
- 点「复制 TSV」把当前表格按制表符分隔写入剪贴板,可直接粘进 Excel 或 WPS。
- 点「导出 CSV」下载带 BOM 的 UTF-8 文件,Excel 双击打开中文不乱码;点「复制 TSV」前无需选中任何单元格。
这个虚拟数据生成器能解决什么问题
第一,填充需要「看起来真实」的测试环境。开发与演示环境最怕满屏 test001,本页产出的每条记录里姓名、手机号、城市、生日、注册日期互相咬合——城市来自国内十二城池、生日落在 1961~2008 年、注册日期落在最近两年内,整行像一个真实用户而不是随机字符拼盘。
第二,一次性拿到多列。独立的随机姓名、随机手机号、随机 UUID 生成器站内有二十多个,但它们一次只给一列;要做表格类演示、数据库填充或接口联调,需要的是 12 行 × 8 列的记录集,这正是本页与兄弟页的分工。
第三,格式合规。手机号严格是 1 加第二位 3~9 再加 9 位数字共 11 位,邮箱控制在 RFC 5321 的 254 字节上限内,UUID 走浏览器原生的 crypto.randomUUID,粘贴进校验逻辑不会被打回。
本页刻意不做的事:不生成身份证号与银行卡号。带合法校验位的证件号即使是随机拼的,也可能被拿去通过弱校验注册,用途风险大于收益;需要占位符时请直接用测试规范里的标准假卡号(如 4111 1111 1111 1111)。
原理和变量
虚拟数据生成器的随机源与均匀性是本页的技术核心。如果随机源只有 8 位(0~255),对 10 取模时余数分布是 26、26、26、26、26、26、25、25、25、25——0 号桶比期望多 1.6%,因为 256 不能被 10 整除,模运算会把不均匀的尾部堆到前面的桶里。本页用「拒绝采样」修掉这个偏差:取 32 位随机源中能被 n 整除的最大上界 floor(2^32 / n) × n(n=10 时是 4294967290),超出上界的样本直接丢弃重抽。32 位源对 10 的丢弃率只有约 0.0000%,10 万次实测各桶落在 9798~10183 之间,均匀性远好于裸取模。随机字节由 crypto.getRandomValues 提供,Math.random 不参与。
手机号的构造口径:中国大陆移动号码 11 位,拆成 1(固定位)+ 第二位 3~9(运营商号段位)+ 用户号 9 位。前缀池取 138、150、166、186 等真实启用段,尾部 8 位由拒绝采样随机补齐,单号段容量 10^8。生成的号码通过 /1[3-9]\d{9}/ 校验,但号段后是否真被运营商分配不做保证——这是演示数据的诚实边界。
邮箱按「拼音姓.名字串 + 两位序号 @example.com」构造,本地部分最长 5 + 1 + 4 + 2 = 12 字符,远低于 RFC 5321 §4.5.3.1.1 规定的本地部分 64 octets 上限;整址最长 26 字符,低于整个地址 254 octets 的推荐上限。域名固定用 example.com,它是 IANA 保留的示例域名,解析到假数据也不会投递到真实邮箱。
UUID 用 crypto.randomUUID(),即 RFC 4122 v4:128 位中 122 位随机,版本位固定 4、变体位固定 10xx。生日字段按「年 1961~2008、月 1~12、日在当月天数内」三段采样,当月天数用 Date.UTC(y, m, 0).getUTCDate() 反查,2 月 29 日只会落在闰年(1996、2000、2004…),不会产出 2026-02-29 这种不存在的日期。
完整示例(数值仅作演示)
虚拟数据生成器预置的 12 行演示数据每一格都通过了逐项校验:12 个手机号全部匹配 11 位号段格式,12 个邮箱全部低于 254 字节,12 组生日的「日」没有超出对应月份天数,12 个金额严格是两位小数且落在 1000~99999 区间。以第 1 行为例:王建国、13872645019(138 段 + 8 位尾数)、wang.jianguo31@example.com(26 字符)、生日 1984-03-12、金额 8460.00、注册日期 2025-06-18。这 12 行是固定写死在页面里的,不依赖 JavaScript 执行——脚本被禁用时表格依然完整。
输入范围与对照表
条数合法区间 1~500,步进 1。渲染采用 12 行分页:500 条数据是 500 × 8 = 4000 个单元格,一次性建 DOM 在低端手机上会明显卡顿,因此首屏 12 行、加载更多每次 12 行,500 条需要点 17 次到底。下表给出不同条数的导出体积(按演示行单行 TSV 75 字符估算):
| # | 条数 | TSV 体积(字符) | CSV 体积(字符,约) | 加载更多点击次数 |
|---|---|---|---|---|
| 1 | 1 | 75 | 83 | 0 |
| 2 | 5 | 375 | 415 | 0 |
| 3 | 12 | 900 | 996 | 0 |
| 4 | 25 | 1875 | 2075 | 1 |
| 5 | 50 | 3750 | 4150 | 3 |
| 6 | 100 | 7500 | 8300 | 7 |
| 7 | 150 | 11250 | 12450 | 12 |
| 8 | 200 | 15000 | 16600 | 16 |
| 9 | 300 | 22500 | 24900 | 24 |
| 10 | 400 | 30000 | 33200 | 32 |
| 11 | 500 | 37500 | 41500 | 41 |
| 12 | 0(非法) | 被拒绝:提示「条数至少为 1」 | ||
CSV 体积按「逗号加分隔改写」粗估,真实体积随姓名长度浮动。导出文件头三个字节是 EF BB BF(U+FEFF 的 UTF-8 编码),这是 Excel 识别 UTF-8 的约定;若导出 JSON 片段则绝不能带这个头,因为 U+FEFF 会让 JSON.parse 直接抛错。
边界与精度
非法输入共四条路径,各自有明确文案:条数留空提示「生成条数为空:请填 1~500 的整数」;非数字(粘贴绕过输入框类型限制)提示「生成条数不是整数」;小于 1 提示「条数至少为 1」;大于 500 提示「条数最多 500,再大批量请分多次生成」。任何一条都不静默夹取——如果悄悄把 501 折成 500,用户会误以为输入被完整接受。
随机量的边界都在构造层收口:生日年份下限 1961(对应 2026 年 65 岁)、上限 2008(对应 18 岁);金额采样区间 1000.00~99999.00,先按拒绝采样取整数分再除以 100,避免浮点乘法引入 0.30000000000000004 这类尾数;UUID 在不支持 crypto.randomUUID 的旧浏览器上回落到手工拼 v4 格式,版本位与变体位照常写死。
数据真实性边界:所有记录的号段、城市、姓名均为随机组合,若与真实个人重合纯属巧合;example.com 域名由 IANA 保留用于文档示例,向它发信不会被任何人收到。生成结果只存在于当前页面的表格与剪贴板里,刷新即清空。
常见问题
生成的数据能用于生产环境注册吗?
不能也不该。手机号可能撞上真实在用号码,邮箱域名是保留示例域,本页定位是测试与演示数据。需要过真实短信验证的号码请走正规渠道获取。
为什么随机分布要特意做拒绝采样?
裸取模在源长度不被整除时有系统性偏置:8 位源对 10 取模时前 6 个桶各多 0.4 次(1.6% 偏差)。单条数据看不出,但批量 500 条时号段、城市的分布会肉眼可见地不均。拒绝采样把这段偏差修到统计不可分辨。
为什么表格每次只显示 12 行?
500 条上限对应 4000 个表格单元格,一次建 DOM 会让低端设备掉帧。12 行分页加「加载更多」是渲染性能与浏览体验的折中,数据本体一直完整存在,导出不受分页影响。
CSV 用 Excel 打开姓名是乱码?
本页导出的 CSV 已在文件头写入 BOM(EF BB BF),正常双击打开不会乱码。如果你用「数据导入」功能选错了编码(如 GBK),才会看到乱码,重新按 UTF-8 导入即可。
手机号会重复吗?
理论上可能:尾部 8 位在 10^8 空间随机采样,500 条里两两撞号的概率约 0.05%(生日问题口径 500×499/2÷10^8)。业务上需要唯一键时请以 UUID 列为准,它有 122 位随机空间,撞号概率可忽略。
为什么没有身份证号和银行卡号?
带合法校验位(GB 11643 的 MOD 11-2、ISO 7812 的 Luhn 算法)的假证件号可能被用于绕过弱校验的注册流程。本页选择不提供这两类字段,占位需求请用各测试规范公开的标准测试卡号。
生日字段会出现 2 月 29 日吗?
会出现,但只在闰年。当月天数用 Date.UTC(年, 月, 0) 反查,2024 年 2 月有 29 天、2026 年只有 28 天,所以永远不会生成 2026-02-29 这种无效日期。
数据会上传或被记录吗?
不会。虚拟数据生成器的随机字节来自浏览器的 crypto 接口,拼装在本页内存里完成,页面没有发起任何网络请求的代码;刷新页面后所有生成的记录即消失。
相关工具
- 虚拟姓名生成器:只需要单列中文姓名时用这个更快。
- 用户名生成器:账号体系测试的单列用户名来源。
- UUID生成器:主键占位,与本页 UUID 列同算法。
- 随机数生成器:单列数字随机量。
- 随机字符串生成器:token 与短码占位。
- 昵称生成器:面向展示层的友好昵称。
- 虚拟用户名生成器:登录名与展示名分离场景的补充。
更多生成器见生成器分类页。