You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于PWA通过Web NFC读取护照RFID芯片信息的技术咨询

基于Web NFC读取身份证/护照芯片数据的实现方案

可行性结论

完全可行,但需要针对不同证件的NFC标准做针对性开发——国内身份证遵循GB/T 27921标准(ISO 14443 Type B协议),护照属于ePassport范畴,遵循ICAO 9303标准,Web NFC的API支持与这类芯片的APDU指令交互,足以提取姓名、出生日期和照片数据。

核心实现步骤

  • 识别证件类型与标准
    首先通过NFC探测判断芯片类型:身份证的UID格式、AID(应用标识符)与护照不同,比如护照的标准AID是A0000002471001,身份证的AID需要参照GB/T 27921的规定。
  • 建立APDU连接
    证件芯片不使用NDEF格式,直接用Web NFC的NFCReader接口发送ISO 7816-4标准的APDU指令。比如选择护照应用的指令是:
    const reader = new NFCReader();
    await reader.scan();
    const selectAidApdu = new Uint8Array([0x00, 0xA4, 0x04, 0x00, 0x07, 0xA0, 0x00, 0x00, 0x02, 0x47, 0x10, 0x01]);
    const response = await reader.transceive(selectAidApdu);
    
  • 读取目标数据块
    • 姓名、出生日期:身份证读取对应TLV结构的基本信息块;护照读取EF_DG1数据组(存储基本身份信息),该数据采用BER-TLV编码,解析后可提取对应字段。
    • 照片:身份证的照片存储在特定数据块中,格式为JPEG;护照的照片存储在EF_DG2数据组,格式为JPEG2000。读取时需要发送APDU指令获取完整的二进制数据(可能需要分块读取,因为数据量较大)。
  • 解析与展示数据
    • 文本字段:按对应标准的编码规则解析二进制数据,比如护照EF_DG1中的姓名采用Unicode编码,出生日期为YYMMDD格式;身份证的字段需要按GB/T 27921的TLV标签提取。
    • 照片:将读取到的二进制数据转为Blob对象,生成可访问的URL用于页面展示:
      // 护照照片示例(JPEG2000)
      const photoBlob = new Blob([photoBinary], { type: 'image/jp2' });
      document.getElementById('id-photo').src = URL.createObjectURL(photoBlob);
      

关键注意事项

  • 浏览器与设备支持:仅Chrome、Edge等少数浏览器支持Web NFC,且设备必须具备NFC硬件,同时PWA需运行在HTTPS环境下。
  • 权限与合规:读取前需通过await reader.requestPermission()获取用户授权;部分证件的敏感数据读取可能需要认证密钥,需确保符合当地隐私法规与证件使用规范。
  • 分块读取处理:照片数据通常较大,需要通过APDU的多块读取指令(比如00B00000系列指令)分批次获取,再拼接成完整的二进制数据。

内容的提问来源于stack exchange,提问作者Alexander N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:22:22