> ## Documentation Index
> Fetch the complete documentation index at: https://verifner.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Lecture NFC

> Lire la puce du passeport ou de la carte d'identité depuis une application Android ou iOS, et la faire authentifier par VerifNer.

Les passeports biométriques et les cartes à puce (dont la carte AES) contiennent une puce sans contact qui garde une copie signée par l'État de la MRZ et du portrait. Une application mobile peut la lire en NFC et l'envoyer avec les photos : VerifNer vérifie alors la signature de l'État, utilise la MRZ de la puce plutôt que celle de la photo, compare le selfie au portrait de la puce et ajoute le contrôle [`chip_authenticity`](/concepts/checks#chip_authenticity).

<Warning>
  Préversion. La lecture de la puce arrive dans les SDK mobiles de VerifNer et n'est pas encore dans leurs versions publiées. Contactez-nous pour y accéder.
</Warning>

<Note>
  La lecture se fait dans une application native. Les navigateurs ne savent pas lire ces puces (Web NFC ne lit que les étiquettes NDEF, et n'existe pas sur iPhone). La carte d'identité papier du Niger n'a pas de puce.
</Note>

## Comment ça marche

```mermaid theme={"dark"}
sequenceDiagram
  participant A as Application
  participant S as Votre serveur
  participant V as VerifNer
  S->>V: POST /v1/sessions (clé secrète)
  V-->>S: id + client_token
  S-->>A: id + client_token
  A->>A: Photos, MRZ lue ou saisie
  A->>A: Lecture de la puce (clé tirée de la MRZ)
  A->>V: POST /v1/sessions/{id}/verify : photos + chip
  V->>S: Webhook verification.completed
```

La puce ne s'ouvre qu'avec le numéro du document, la date de naissance et la date d'expiration, imprimés dans la MRZ : l'application les lit à la caméra ou les fait saisir. Le téléphone ne décide de rien : il transmet les fichiers tels quels (`EF.SOD`, `EF.DG1`, `EF.DG2`), et c'est VerifNer qui les authentifie. Une application modifiée ne peut donc pas faire passer une fausse puce.

## Le champ `chip`

Ajoutez `chip` au corps JSON de `POST /v1/sessions/{id}/verify` (ou de `POST /v1/verify`), en base64 :

```json theme={"dark"}
{
  "front": "<base64>",
  "selfie": "<base64>",
  "chip": { "sod": "<base64>", "dg1": "<base64>", "dg2": "<base64>" }
}
```

`dg2` (le portrait, 15 à 30 Ko, quelques secondes de lecture) est facultatif mais recommandé : la comparaison faciale se fait alors avec le portrait signé. En `multipart/form-data`, envoyez le même objet en texte JSON dans un champ `chip`. Un `chip` mal formé est refusé en `400 invalid_request`.

## Dans votre application

La lecture de la puce est intégrée aux SDK mobiles de VerifNer. Elle est désactivée par défaut : chaque SDK explique comment l'activer.

**React Native** (`@verifner/react-native`) : une propriété sur le parcours guidé.

```tsx theme={"dark"}
<VerifNerFlow sessionId={…} clientToken={…} apiUrl="https://api.verifner.com" camera={visionCamera} nfc />
```

Après les photos du document, le parcours demande de poser le téléphone sur le document, lit la puce et l'envoie avec les photos. L'étape n'apparaît que si le téléphone peut lire une puce, jamais pour la carte papier, et la personne peut la passer.

**Flutter** (`verifner_flutter`) : `ChipReader().read(key)` renvoie les fichiers de la puce, à joindre à l'envoi dans le champ `chip`.

Sur Android, la puce est ouverte en PACE quand elle le propose, sinon en BAC. Sur iOS (iOS 15, iPhone 7 et suivants), l'application doit déclarer :

* la capacité **Near Field Communication Tag Reading** (droit `com.apple.developer.nfc.readersession.formats` = `TAG`) ;
* dans `Info.plist`, `NFCReaderUsageDescription` et `com.apple.developer.nfc.readersession.iso7816.select-identifiers` contenant `A0000002471001`.

## La clé de la puce

La puce ne s'ouvre qu'avec trois valeurs de la MRZ. Pour éviter de les faire saisir, envoyez la photo qui montre la MRZ (la page du passeport, le verso d'une carte) à `POST /v1/sessions/{id}/mrz`, avec le jeton client, en `multipart/form-data` dans le champ `image` :

```json theme={"dark"}
{ "key": { "document_number": "L898902C3", "date_of_birth": "740812", "date_of_expiry": "120415" } }
```

La réponse ne donne la clé que si tous les chiffres de contrôle de la MRZ sont justes ; sinon `{ "key": null }`, et l'application demande les trois valeurs à la personne. Rien n'est conservé ni facturé. Le SDK React Native le fait pour vous.

## Ce que la puce prouve, et ce qu'elle ne prouve pas

* **Prouvé** : les données de la puce n'ont pas été modifiées depuis que l'État les a écrites, et elles correspondent au document photographié.
* **Prouvé si l'État est enregistré** : le signataire appartient bien à l'État émetteur. Sinon le contrôle reste en `warn`.
* **Non prouvé** : que la puce n'est pas une copie d'une puce authentique. La photo, le selfie et les autres contrôles continuent de compter.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.