为什么生成的地址是真实存在的:Address数据源与真实性门禁设计完全解读
【免费下载链接】addressA self-hosted address and synthetic test-profile generator for 27 countries and regions, built from real open-data streets, administrative areas, coordinates, and postcodes. Supports multilingual output, IP-nearby generation, map previews, and API access. 基于真实开放数据的自托管地址与合成测试资料生成器,覆盖 27 个国家和地区,支持多语言地址、IP 附近生成、地图预览与 API 调用项目地址: https://gitcode.com/gh_mirrors/address4/address
使用地址生成器测试表单、物流和支付流程时,最大的顾虑往往是"生成的是不是瞎编的"?Address 是一个基于真实开放数据的自托管地址与合成测试资料生成器,覆盖 27 个国家和地区——它生成的每一条地址都来自官方地址登记册、开放地图数据或经验证的地理编码结果,并附带来源、精度和坐标;缺失字段保持留空,绝不编造。本文带你完整解读 Address 的数据源体系与真实性门禁设计,看看"真实存在"这四个字背后有哪些工程保障。
一、真实地址生成器的核心承诺
与其他"随机拼字"式工具不同,Address 的每条记录都带有可追溯的身份信息:
matchLevel(精度):street(街道)、premise(门牌)、subpremise(门牌+单元)三级精度,记录实际可信到什么程度;propertyType(用途):只有存在独立住宅证据时才标记residential,绝不把街道或公共建筑冒充住宅;- 来源与坐标:每条地址保留来源标识、语言字段和 WGS84 坐标,可在地图上直接核验。
下面就是生成器实际产出的美国真实地址与项目总览:
二、数据从哪来:27 国的官方与开放数据源
真实性首先来自数据源。Address 为每个国家/地区配置了专属数据策略,完整清单见 docs/data-sources.md,单国细节见 docs/strategies/。摘取几类典型来源:
| 类别 | 代表国家 | 数据源示例 |
|---|---|---|
| 官方地址登记册 | 加拿大 | Statistics Canada 全国地址登记册(NAR 2026-06) |
| 官方地籍/房产系统 | 西班牙、荷兰、法国 | Catastro INSPIRE、Kadaster BAG、CSTB BDNB |
| 官方政府图层 | 墨西哥、泰国、日本 | INEGI 地址框架、DPT 建筑图层、数字厅 ABR |
| 开放地图数据 | 美、德、英、俄等 | Overture Maps、Geofabrik OSM 分片 |
| 地理编码补全 | 印度、越南、南非等 | Google Geocoding、Mappls(仅消费既有真实种子) |
几个值得注意的设计原则:
- API 补全不创造事实:Google/Mappls 只对既有的 OSM 地址、住宅建筑和命名道路做消费补全,目录中心点只能用于排序,不能作为地址来源(见 server/sync/address-etl.mjs)。
- 许可随源保留:每个数据集在
address_sources表中登记许可证、署名与再分发要求(server/database/schema.sql),不能用平台元数据覆盖上游许可。 - 住宅证据独立:如美国的住宅子集必须来自 OSM
building=house/apartments或 Overture 明确住宅类别,没有证据的地址只进隔离区(docs/strategies/US-address-strategy.md)。
三、真实性门禁:地址入库前的多道检查
数据源只是第一步。真正决定"能不能发布"的是国家契约门禁,完整规则见 docs/address-contracts.md 与 docs/address-formats.md。核心检查包括:
- 地址字段不编造:只允许大小写、全半角、空白等可逆规范化;附近邮编、邻近地址、翻译反推、随机补值一律禁止。
- 按精度验必填项:街道级不强制门牌,门牌级必须有真实街名+门牌;中国则额外要求小区、六位邮编与住宅证据。
- 行政归属校验:省/州/城市/区县必须与官方目录一致,来源冲突的记录不进入 active 池,而是进入隔离区。
- 坐标边界门禁:坐标必须落在该国边界多边形内,越界直接判为
coordinates_outside_country。 - 邮编格式校验:不符合本国格式的邮编,非中国地区留空并保留地址(不淘汰真实记录);中国与新加坡则要求唯一可验证的六位邮编。
- 占位街道拒绝:
Unnamed Road、Đường không tên、Calle sin nombre等地理编码占位名会被placeholder_street规则拦下,因为它们不是真实街道。
这些规则统一实现在 src/domain/address-quality.mjs 中,validateAddressQuality()函数会对每条候选逐项返回拒绝原因,addressQualitySqlClause()则生成同一套规则的数据库侧筛选条件,确保"入库门禁"和"读取门禁"永远一致。
四、影子表发布与原子切换
通过了单条校验还不够,整批数据要经过发布流水线:
- 候选数据先写入影子表完成质量统计;
- 全部门禁通过后,才原子切换同来源的旧快照;
- 失败记录只保留拒绝统计,绝不混入发布池;
- 同步失败时保留上一合格快照,用户永远读不到半成品。
发布后还会以官方行政区 ID 重建覆盖统计,前端、后台、生成索引与同步目标使用同一份合格总数(详见 docs/data-sources.md 的自动同步章节)。
五、读取层二次校验:索引只是加速器
即使数据发布合格,生成时还有一道保险。随机生成使用的预构建索引被明确定位为"候选加速器,而非发布权威":
- 每次从索引选中候选行后,读取层会重新校验质量、过期时间、国家、住宅证据与筛选条件,过期或失效行直接跳过;
- 按 seed 在有界候选窗口内独立偏移,再按主键读取完整地址与证据,相同 seed 可在同一数据库快照中复现(server/api/services/random-address-service.ts);
- 未筛选地区若数据无覆盖,返回空结果,绝不悄悄替换成附近或全国地址。
六、质量审计:10% 缺陷率红线
项目还配有独立的质量审计脚本 scripts/validate-address-quality.mjs,对每个国家抽样 4000 条记录检查:
- 街道名、城市字段是否为空;
- 邮编是否符合该国格式;
- 文字系统是否合法(如中国街道不得出现西里尔文、俄罗斯不得出现汉字);
- 中国额外执行"城市必须命中官方目录"的锚定检查。
任何国家的缺陷比例超过 10% 红线,脚本即以失败退出——真实性门禁不只存在于入库瞬间,而是持续生效的质量约束。
总结
Address 的"真实存在"不是口号,而是一条完整链路:官方与开放数据源 → 国家契约门禁 → 影子表原子发布 → 读取层二次校验 → 抽样质量审计。缺失的字段留空、冲突的记录隔离、没有证据的住宅声明被拒绝——正是这些"说不",让生成器输出的地址经得起地图核验,可以放心用于表单测试、地址格式验证和物流演示。
想进一步了解部署与 API 细节,可参考 docs/API.md 与 docs/DEPLOYMENT.md。
【免费下载链接】addressA self-hosted address and synthetic test-profile generator for 27 countries and regions, built from real open-data streets, administrative areas, coordinates, and postcodes. Supports multilingual output, IP-nearby generation, map previews, and API access. 基于真实开放数据的自托管地址与合成测试资料生成器,覆盖 27 个国家和地区,支持多语言地址、IP 附近生成、地图预览与 API 调用项目地址: https://gitcode.com/gh_mirrors/address4/address
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考