diff --git a/passport-nfc-app/docs/开发计划.html b/passport-nfc-app/docs/开发计划.html new file mode 100644 index 0000000..f85bc2c --- /dev/null +++ b/passport-nfc-app/docs/开发计划.html @@ -0,0 +1,199 @@ + + + + + +手机扫护照混合 App — 开发计划 + + + +
+ +

手机扫护照混合 App — 开发计划

+

工程代号 passport-nfc-app。目标:用手机 NFC 读取带芯片的电子护照(eMRTD),读出 MRZ、基本信息、芯片头像并做真伪验证。本文档为立项与分阶段实施计划。最后更新 2026-11-10。

+ +
+一句话:用 Capacitor + Angular 做壳,护照芯片读取由自定义原生插件完成(iOS 用 NFCPassportReader,Android 用 jMRTD)。双端、全深度(MRZ + DG1 + DG2 头像 + PA 验真),先做独立 Demo,暂不接后端。 +
+ +

1. 已确认的决策

+
+ + + + + + + + +
决策项结论理由
技术栈Capacitor + Angular贴合现有 AML_Frontend / justsolutionsWeb 的 Angular 技术栈,H5 可复用,NFC 走原生插件
目标平台iOS + Android两端都要覆盖;实施上 Android 优先
读取深度MRZ + DG1 + DG2 头像 + PA 被动认证KYC 防伪必须验签(PA)
后端集成先做独立 Demo先验证可行性,后续再接 ScanCertificateV2
+
+ +

2. 技术约束与现实(必须先知道)

+
+ +
+ +

3. 架构总览

+
┌─────────────────────────────────────────────┐
+│  Angular (WebView) —— 界面层                   │
+│  输入/OCR MRZ → 调插件 → 展示字段/头像/验真结果    │
+└───────────────┬─────────────────────────────┘
+                │  Capacitor Bridge (JS ↔ Native)
+┌───────────────┴─────────────────────────────┐
+│  自定义插件 PassportNfc.readPassport(mrzKey)    │
+│   ├─ iOS   : Swift  + NFCPassportReader        │
+│   └─ Android: Kotlin + jMRTD + SpongyCastle     │
+│      BAC/PACE → 读 DG1/DG2 → PA 验签             │
+└──────────────────────────────────────────────┘
+ +

4. 关键原生库选型

+

均为业界事实标准,避免自己实现密码学与协议栈。

+
+ + + + + + + +
平台库语言 / 许可能力
iOSNFCPassportReader(AndyQ)Swift / MITBAC + PACE、DG1/DG2、PA(可带 CSCA masterlist)、AA
AndroidjMRTD + SCUBA + SpongyCastleJava/Kotlin / LGPLBAC + PACE、全数据组、PA、AA
MRZ OCR(P4)ML Kit Text Recognition 或 Tesseract—摄像头识别 MRZ 两行,替代手输
+
+ +

5. App 核心流程

+
    +
  1. 输入或摄像头扫描 MRZ → 得到 护照号 + 出生日期 + 有效期
  2. +
  3. 点「贴卡读取」→ 调 PassportNfc.readPassport({ mrzKey })
  4. +
  5. 原生层:13.56MHz 供电 → BAC/PACE 开安全通道 → 读 DG1(文本)、DG2(头像)、EF.SOD
  6. +
  7. PA 被动认证:SOD → DSC → CSCA 证书链校验
  8. +
  9. 回传 JSON + 头像 base64 + 验真结论 → Angular 展示
  10. +
+ +

6. 建议工程结构

+
passport-nfc-app/
+├── docs/                     本计划等文档
+├── src/                      Angular 界面(MRZ 输入页、读取页、结果页)
+├── capacitor.config.ts
+├── android/                  cap add android 后生成
+├── ios/                      cap add ios 后生成
+└── plugins/passport-nfc/     自定义 Capacitor 插件
+    ├── src/                  TS 接口 definitions / web 桩
+    ├── android/              Kotlin + jMRTD 实现
+    └── ios/                  Swift + NFCPassportReader 实现
+ +

7. 分阶段路线图

+
+ + + + + + + + + + +
阶段内容产出 / 验收工具链前置
P0搭 Capacitor + Angular 骨架 + 插件 TS 接口与 web 桩Web 壳能跑;插件接口定义完成Node(已就绪)
P1Android 优先:Kotlin 插件接 jMRTD,手输 MRZ,读 DG1/DG2安卓真机扫出芯片文本 + 头像JDK + Android Studio + 安卓真机
P2PA 被动认证 + 头像展示 + 错误/超时处理 + UI 打磨安卓完整 Demo,含验真结论同上 + CSCA masterlist
P3iOS:Swift 插件接 NFCPassportReader,配 entitlementiPhone 真机双端打通Xcode + CocoaPods + iPhone + 付费账号
P4MRZ 摄像头 OCR,替代手输;体验完善扫 MRZ 自动填充ML Kit / Tesseract
P5(可选)接 AML 后端 ScanCertificateV2,与柜台扫描仪统一口径读取结果入 KYC 流程后端联调
+
+ +

8. 本机工具链现状

+
+ + + + + + + + + + +
工具状态用途动作
Node 24 / npm 11已就绪Capacitor + Angular—
JDK未装Android 构建P1 前装(Android Studio 自带)
Android SDK / Studio未装Android 构建 / 真机部署P1 前装
Xcode未装iOS 构建P3 前装
CocoaPods未装iOS 依赖P3 前装
付费 Apple 开发者账号待确认iOS NFC entitlementP3 前准备
+
+ +

9. 风险与合规

+
+ +
+ +

10. 验收标准(Demo Done)

+ + +

11. 下一步

+
+P0 立即可做(无需原生工具链):初始化 passport-nfc-app 的 Capacitor + Angular 骨架,定义 PassportNfc 插件接口与 web 桩,搭好 MRZ 输入 / 结果展示两个页面。
+之后进入 P1 需先安装 JDK + Android Studio 并准备一台带 NFC 的安卓真机 + 一本实体护照。 +
+ + + +
+ +