虚拟数据生成器

一次生成整行联动的多字段中文测试记录,拒绝采样保证均匀,TSV 复制与 CSV 导出直接可用。

#姓名手机号邮箱城市生日金额(元)注册日期UUID
1王建国13872645019wang.jianguo31@example.com杭州1984-03-128460.002025-06-183f7a1c92-8b4e-4d21-9c85-6a2e0f4b7d13
2李秀兰15063928470li.xiulan07@example.com成都1992-11-2512980.502026-01-02a1e05f83-27c9-4b6a-b0d4-8f92c3e17a05
3张伟18620481753zhang.wei42@example.com北京1978-07-085320.802024-12-117c42b9d0-1e5f-4a83-8d27-c6b04f1e9a38
4刘敏13358940271liu.min15@example.com深圳1995-02-1720755.902025-09-30b8d04a71-93c2-4e5f-a1b6-2d7e9c04f856
5陈勇15283067492chen.yong23@example.com广州1988-09-307680.002025-03-220e91f6b2-5d84-4c07-9a3e-e41b8d52c790
6杨静15847290136yang.jing56@example.com上海2001-05-063940.602026-02-1442a8c1d9-6f03-4b7e-8c52-9d06e3a1b472
7黄强16680539742huang.qiang18@example.com南京1981-12-1915230.402025-08-05d5c30e28-a7b1-4f94-b2d8-1c47f0a69e83
8赵磊17631950824zhao.lei29@example.com武汉1990-08-239875.202024-11-2719b7f4c6-0d2a-4e81-a5c3-b8e20d74f169
9周娟13570492816zhou.juan03@example.com西安1997-04-116120.702026-04-196e24a0b8-c951-4d36-8f70-3a91c5e2d804
10徐军18962037458xu.jun64@example.com重庆1986-01-2811340.302025-05-09c8f15d73-4a0e-4b29-9b64-e7d08a3c51f2
11孙丽13790584162sun.li21@example.com苏州1993-10-144890.002026-06-012d90b5e1-7c34-4af8-80d2-5b63f9c04a17
12马涛19074620385ma.tao52@example.com天津1983-06-0517860.902025-01-2685a3c7f0-1b62-4de9-9408-cc27e5b81a36
上表 12 行为预置演示数据(数值仅作演示);点「重新生成」按当前条数产出全新随机记录。

使用方法

  1. 在「生成条数」填 1~500 的整数(示例填 12),或直接点「重新生成」按默认 12 条产出。
  2. 点「重新生成」或在输入框按回车,表格被全新随机记录替换;首屏永远只渲染前 12 行。
  3. 数据超过 12 条时点「加载更多」每次追加 12 行,避免一次性塞入上千个单元格拖慢页面。
  4. 点「复制 TSV」把当前表格按制表符分隔写入剪贴板,可直接粘进 Excel 或 WPS。
  5. 点「导出 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 体积(字符,约)加载更多点击次数
1175830
253754150
3129009960
425187520751
550375041503
6100750083007
7150112501245012
8200150001660016
9300225002490024
10400300003320032
11500375004150041
120(非法)被拒绝:提示「条数至少为 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 接口,拼装在本页内存里完成,页面没有发起任何网络请求的代码;刷新页面后所有生成的记录即消失。

相关工具

更多生成器见生成器分类页。