目录

审计函证地址核查自动化:从工商查询到地图API到Web Search的三层过滤

/images/地址核查_cover.png

我还是初级的时候,就在"信息查询瑞士军刀"里做过一个函证地址核查功能。

当时市面上还没有这种工具。我的做法很直接——注册一个百度地图 API,两个地址丢进去算距离,通过距离远近来判断地址是否一致。

后来市面上陆续出现了类似的工具,大家都在用地图 API 算距离。

但我发现一个问题。

光靠距离是不够的。地址相近,不代表函证地址就一定真实;距离远,也不代表就一定有问题——建筑公司的发函地址经常是项目工地,跟注册地差着上千公里,但这是正常的。

真正耗时的是距离远的那批:你得打开浏览器,一家一家去搜,看这个公司在那个地方到底有没有项目或者办公地址。搜到了就标记通过,搜不到就标异常。这个人工搜索的环节,才是最费时间的。

所以我用 AI 重新做了这个功能,把它做成了一个 Skill。核心改进就是:把人工搜索这一步也自动化了。

三层过滤:从简单到复杂

整个核查逻辑分三层,层层递进:

/images/地址核查_三层过滤.png

第1层:文本相似度(零API,秒出结果)
  ↓ 未通过
第1.5层:地理编码距离(调地图API)
  ↓ 未通过
第2层:Web Search 人工/AI 介入

第1层:文本相似度

最简单粗暴的一层。把发函地址和工商注册地址做文本比对,用 thefuzz 库算相似度。

相似度 ≥ 80%,直接通过。

比如:

  • 发函地址:“济南市工业南路89号”
  • 工商地址:“济南市工业南路89号”
  • 相似度:100%

这一层能直接过滤掉大量地址一致的公司。不需要调任何 API,零成本,秒出结果。

但有些公司注册地址带了省份前缀,发函地址没带,比如:

  • 发函地址:“长沙市雨花区中意一路158号”
  • 工商地址:“湖南省长沙市雨花区中意一路158号”

相似度可能掉到 95%,但仍然 ≥ 80%,依然通过。

第1.5层:地理编码距离

文本相似度低于 80% 的,不一定就是有问题。比如地址表述差异很大,但实际可能是同一个地方。

这一层调用腾讯地图 API,把两个地址分别转成经纬度坐标,然后算直线距离(Haversine 公式)。

距离 ≤ 2km,判定为通过。

2km 是什么概念?基本就是同一个行政区域内,可能是街道门牌号的差异,或者是工商注册用了简写。

前两层都没通过的,才进入这一层。

这一层解决的就是我之前说的那个痛点——人工搜索。

以前你得自己打开浏览器,搜公司名、搜项目名、翻新闻、翻公告。现在 AI 帮你搜,搜到的结果自动写进报告里,连来源网址都附上,你可以点进去验证。

/images/地址核查_websearch.png

一个案例:10 家公司的核查全过程

我用一组模拟数据跑了完整流程。10 家公司,覆盖了建筑施工、水利水电等行业。

输入

一份 Excel,两列:公司名称 + 发函地址。

/images/Pasted-image-20260523175121.png

运行结果

脚本自动完成工商查询(通过中注协行业知识库),然后逐层过滤:

第1层直接通过的(4家):

公司 发函地址 工商地址 相似度
中建八局第一建设 济南市工业南路89号 济南市工业南路89号 100%
中铁四局集团 合肥市包河区望江东路96号 合肥市包河区望江东路96号 100%
中交第三航务工程局 上海市徐汇区平江路139号 上海市徐汇区平江路139号 100%
中国建筑第五工程局 长沙市雨花区中意一路158号 长沙市雨花区中意一路158号 95%

这 4 家地址完全一致或基本一致,发函地址就是注册地址,没什么好说的。

进入第1.5层的(6家):

全部因为相似度低于 80% 被拦下来,地理编码距离也远超 2km。比如:

公司 发函地址 工商地址 相似度 距离
中铁十二局 深圳地铁16号线项目部 太原市万柏林区西矿街130号 22% 1711km
水电七局 白鹤滩水电站施工区 成都市郫都区成灌东路349号 6% 415km
中交一公局三公司 莎车公路项目指挥部 北京市通州区景盛北三街10号 10% 3369km

1711 公里、3369 公里…… 这些地址根本不在一个城市。

但这不代表一定有问题。建筑公司的发函地址是项目工地,这是行业常态。

所以这 6 家全部进入第 2 层:Web Search 验证。

第2层:Web Search 逐个验证

搜索策略不是简单地搜公司名,而是有针对性地搜索:

策略 搜索词 适用场景
公司+地址 “公司名” “地址关键词” 通用
项目+地名 “项目名” “地名” 建筑公司
母公司+项目 “母公司” “项目地名” 分公司/施工局

通过验证的(3家):

公司 验证结果
中铁十二局 百度百科:参建深圳地铁16号线,2022年12月开通。项目部地址合理。
水电七局 中国电建官网:组建白鹤滩施工局,承建左岸引水发电系统。施工区地址合理。
中建三局 央视网/澎湃新闻:承建武汉绿地中心,设有总承包项目部。项目部地址合理。

这 3 家虽然发函地址和工商注册地址差了上千公里,但都能找到权威来源确认公司在该地址有项目。属于建筑行业正常的施工现场地址。

仍然异常的(3家):

公司 异常原因
中交一公局三公司 发函地址为"莎车公路项目指挥部",但 G217 莎车项目中标方为中交一公局厦门公司,非三公司。未找到三公司在莎车的权威佐证。
贵州建工第八 工商地址在贵阳,发函地址在从江县丙妹镇。未找到该公司在从江县的任何项目记录。
河北建设唐山分公司 工商地址在唐山高新区,发函地址在滦南县柏各庄镇。未找到在滦南县的项目记录。

判定规则:证据不足就是异常

这里有个核心原则:

没有权威来源直接佐证 = 异常。

什么算"权威来源"?政府招标公告、公司官网、权威媒体报道、百度百科等。B2B 平台上的企业信息不算——那谁都能填。

最终输出

脚本自动生成一份 Excel 报告,7 列:

内容
公司名称 被函证单位
发函地址 函证寄送地址
工商注册地址 工商系统查询结果
相似度(%) 文本相似度
距离(km) 两地址直线距离
匹配说明 未通过原因 / Web Search 佐证
核查结论 通过(绿色)/ 异常(红色)

结论列带颜色标记,一眼就能看出哪些需要关注。

/images/Pasted-image-20260523175256.png

总结一下

整个流程:

  1. 工商查询 → 拿到注册地址
  2. 文本比对 → 相似度 ≥ 80% 直接通过
  3. 地理编码 → 距离 ≤ 2km 直接通过
  4. Web Search → 逐个验证异常项,找权威来源佐证
  5. 生成报告 → Excel 带颜色标记

10 家公司,自动化完成前两层,第三层由 AI 搜索验证。整个过程从传统的一两天压缩到几分钟。

当然,这个脚本是 Claude Code 写的,核心代码量也不大。但解决的问题很实际:把一个重复、枯燥、容易出错的核查工作,变成了一套标准化流程。

而且地址核查不一定要单独用。它本身就是一个基础功能,可以被其他更大的实质性程序调用——比如应收账款审计流程里,函证样本选完之后,地址核查自动跟着跑。这才是 AI 审计工具化的正确方向:每个小功能做好一件事,大的流程把它们串起来。