关于 ofac-match
OfacMatch 是用于对照 OFAC SDN 名单筛查姓名的 .NET 库和本地 MCP 服务。它为潜在匹配评分,并说明命中的姓名或别名及各部分的比对情况,合规判断仍由人工负责。
主要功能
- 01按 OFAC SDN 名单筛查姓名
- 02为潜在匹配评分并解释原因
- 03处理别名、重音符号和姓名变体
- 04标记出生年份或国家不一致
- 05加载名单以离线筛查
适用场景
- 01在合规审查中筛查借款人姓名
- 02调查姓名触发匹配的原因
- 03核查不同拼写或别名的姓名
- 04通过 AI 客户端筛查姓名并查询条目
MCP 相关
OfacMatch.Mcp 提供单个或批量姓名筛查、SDN 条目查询、姓名比较和名单信息查询工具。它在本地运行,无需 API 密钥。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
OfacMatch
面向 .NET 的 OFAC 制裁名单姓名筛查工具,并会告诉你姓名为何匹配。

在浏览器中试用:无需安装,你输入的姓名绝不会离开浏览器。
我为什么构建它
我曾在 First American 用十年时间构建产权和抵押贷款系统,其中包括 OFAC 筛查,用于阻止贷款发放给美国财政部制裁名单上的对象。姓名匹配听起来很简单,直到合规分析师问起某个姓名为何被标记,或某个拼写有误的姓名为何没有被标记。
许多团队仍在手动搜索 OFAC 网站,或依赖无法查看内部逻辑的筛查系统。我想要一个小巧且开源的工具:加载官方名单,按照 OFAC 在其常见问题中的说明对姓名评分,并展示每项评分背后的依据。
功能
OfacMatch 会从 OFAC 下载特别指定国民(SDN)名单,对照名单筛查姓名,并为每个潜在匹配项给出 0 到 100 的评分,采用与 OFAC搜索工具相同的量表。每个匹配项都会附带说明:命中了哪个姓名或别名,以及姓名的各个部分是如何对应的。
它能处理真实姓名中常见的复杂情况:重音符号、LAST, First 顺序、撇号和连字符、“Dr.” 之类的头衔、LLC 或 LTD 之类的公司后缀(即使拼写有误),以及别名。如果你提供的出生年份或国家与名单记录不符,匹配项会被标记,而不是隐藏,因为是否匹配应由人来判断。
它没有依赖项,在你自己的进程中运行(姓名绝不会离开你的系统),并且兼容现代 .NET 和 .NET Framework 4.7.2+。
我没有凭空猜测,而是用真实名单进行了测试:在阈值为 85 时,它能找到 4,255 个真实模拟的名单姓名拼写错误和变体中的 99.8%。评估报告列出了详细信息,包括目前仍会漏掉的情况。
这是一个早期版本(0.1)。非常欢迎反馈、错误报告,以及评分不理想的姓名变体。
OfacMatch 可帮助你进行筛查;它不会做出合规决定,也不是法律建议。评分表示两个姓名的书写方式有多相似,并不表示两条记录是否属于同一个人。请根据自己的风险评估选择阈值,并安排人员审核每个潜在匹配项。更多内容请参阅负责任地使用 OfacMatch。
快速开始
dotnet add package OfacMatch
using OfacMatch.Data;
using OfacMatch.Screening;
using var http = new HttpClient();
var list = await SanctionsList.DownloadAsync(http, saveToDirectory: "ofac-data");
var screener = new SanctionsScreener(list, new ScreeningOptions { MinScore = 85 });
foreach (var match in screener.Screen("Aymen Zawahri"))
{
Console.WriteLine(match.Explain());
}
根据 2026 年 10 月 27 日发布的 SDN 名单生成的输出:
Score 95.8 via NameParts against Primary name "AL ZAWAHIRI, Dr. Ayman"
Entry 2676: AL ZAWAHIRI, Dr. Ayman (Individual; programs: SDGT)
Full-name score 84.5; name-parts score 95.8
AYMEN -> AYMAN: similarity 0.907, sounds alike
ZAWAHRI -> ZAWAHIRI: similarity 0.946, sounds alike
评分原理将逐步讲解这个示例。
使用更多背景信息进行筛查
var request = new ScreeningRequest("John Michael Doe")
{
Type = EntryType.Individual, // a borrower is a person, so skip companies and vessels
YearOfBirth = 1971, // flags matches whose listed dates of birth disagree
Country = "United States", // flags matches whose listed addresses are all elsewhere
};
var matches = screener.Screen(request);
离线使用
var list = SanctionsList.LoadFromDirectory("ofac-data"); // SDN.CSV, ALT.CSV, ADD.CSV
OFAC 会频繁更新名单。请至少每天重新加载,并在每次做出决定前,根据当前名单进行筛查。
在 AI 助手中使用(MCP 服务)
OfacMatch.Mcp 可让 Claude、GitHub Copilot 和其他 MCP 客户端筛查姓名、查询 SDN 条目并说明评分。它在本地运行,无需 API 密钥。
Claude Desktop: 从最新发布版本下载适用于你电脑的扩展(ofac-match-windows.mcpb 或 ofac-match-mac-*.mcpb),然后双击即可。无需 .NET 或配置文件。
Claude Code 插件(添加服务和一个用于负责任地报告结果的技能;需要 .NET 10 SDK):
/plugin install ofac-match --marketplace krunalsolanki/ofac-match
Claude Code 和其他客户端(需要 .NET 10 SDK):
claude mcp add ofac-match -- dnx OfacMatch.Mcp --yes
工具:screen_name、screen_names、get_sanctions_entry、compare_names、get_list_info。有关其他客户端和设置,请参阅 MCP 服务指南。
命令行
dotnet run --project samples/OfacMatch.Cli -- "Aymen Zawahri" --min 85 --yob 1951
在真实 SDN 名单上的结果
根据评估:使用 2026 年 10 月 27 日发布的 SDN 名单,对 600 个名单中的对象(400 名个人、200 家公司)及其 4,255 种逼真的姓名变体,以及 2,000 个普通姓名进行了测试。
| 阈值 | 找到的名单对象 | 触发警报的普通姓名 |
|---|---|---|
| 80 | 99.9% | 83.4% |
| 85 | 99.8% | 47.9% |
| 90 | 99.8% | 15.9% |
| 95 | 99.5% | 3.8% |
测试的变体包括:完全匹配、姓氏在前、去除标点并转为小写、一个字母错误、两个字母互换、缺少一个字母、不同的转写方式、合并词缀(“ALZAWAHIRI”)、省略中间名,以及更改公司后缀。
这些数字中有两点让我感到意外。第一,仅按姓名筛查会触发很多警报:大约一半的普通双词姓名看起来都像名单上的某个对象,其中少数甚至与名单中某人的姓名完全拼写相同。出生日期和国家/地区信息能让审核人员快速排除这些情况。第二,将阈值从 85 提高到 90,警报减少了三分之二,同时没有漏掉这些变体中的任何一个,因此应当审慎选择阈值,而不是直接采用默认值。
你可以自行重新运行:
dotnet run -c Release --project eval/OfacMatch.Evaluation -- --data ofac-data --out docs/evaluation.md
文档
| 指南 | 内容 |
|---|---|
| 为什么选择 OfacMatch | 优势以及与其他选项的比较 |
| 评分原理 | 每个步骤,并附完整示例 |
| API 和配置参考 | 类型、选项和默认值 |
| 负责任地使用 OfacMatch | 阈值、审核、记录保存和限制 |
| 评估 | 按变体和设置划分的完整结果 |
| MCP 服务 | 在 AI 助手中使用 OfacMatch |
后续计划
我希望开展的工作,大致按优先顺序排列:
- 在真实名单上进行评估
- 提高罕见词的权重(“CUBA”应比“BANK”更重要),以减少常见姓名触发的警报
- 识别公司名称后缀开头的拼写错误(“LTMITED”)
- 支持 OFAC 的 Consolidated(非 SDN)名单和 Advanced XML 格式
- 加快批量筛查
- 提供 ASP.NET Core 示例和
dotnet tool包
如果你想参与其中任何一项,或遇到评分不理想的案例,请提交 issue。CONTRIBUTING.md 中提供了详情。
引用
如果您在研究或文稿中使用 OfacMatch,请引用这篇论文:
Solanki, K. (2026). 针对 OFAC SDN 名单的可解释姓名筛查:开源实现与可复现评估(预印本)。Zenodo. https://doi.org/10.5281/zenodo.23930926
@misc{solanki2026ofacmatch,
author = {Solanki, Krunal},
title = {Explainable Name Screening Against the {OFAC} {SDN} List: An Open Implementation and Reproducible Evaluation},
year = {2026},
publisher = {Zenodo},
note = {Preprint},
doi = {10.5281/zenodo.23930926},
url = {https://doi.org/10.5281/zenodo.23930926}
}
引用软件本身:
Solanki, K. OfacMatch:可解释的 OFAC 制裁姓名筛查(软件)。Zenodo. https://doi.org/10.5281/zenodo.23926803
两个 DOI 始终指向最新版本;每个版本在 Zenodo 上也有自己的 DOI。GitHub 的 引用此仓库按钮可提供其他格式的论文引用。
致谢
由 Krunal Solanki 开发。这个想法和合规背景源自我在抵押贷款业务中开展 OFAC 筛查的工作。
隐私政策
OfacMatch 不收集任何信息。您筛查的姓名会在自己的计算机上处理;如果使用网页,则会在浏览器中处理,绝不会发送到任何地方。唯一的网络请求是从 OFAC 下载公开的 SDN 名单,该名单会缓存在本地。详情请参阅:PRIVACY.md。
数据
SDN 名单由美国财政部外国资产控制办公室发布。OfacMatch 从 OFAC 的制裁名单服务下载该名单,不会重新分发。单元测试仅使用虚构姓名。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。