Skip to main content

Matching

This topic describes how you can use the following features to corroborate data from different sources:

Process/userData matching service

This section describes how to use the Matching service to compare information in two data nodes of a dossier. These nodes can be:

The fields that are matched from each data node are the following:

FieldMatching algorithm
firstNameString matching
lastNameString matching
dateOfBirthDate matching
Conditions
  • All data nodes must exist inside the same dossier.
  • To have a finalResult, the process must have been “accepted”.
Other matching services?

If you need other matching services than the ones described in this section, you contact us by creating a support ticket in the Signicat Dashboard.

String matching

Values are normalised into uppercase before matching is performed. Diacritics are removed.

A string compare is performed:

  • Exact match: true if all characters match, otherwise false.
  • Partial match:true if it is composed of multiple names and at least one is an exact match or the similarity ratio is above 90% of characters. Otherwise false.

Examples on string matching:

sourcetargetExact matchPartial match
AnaAnatruetrue
anaAnatruetrue
ANAAnatruetrue
AnaMaria Anafalsetrue
AnitaAnafalsetrue
MariaAnafalsefalse

Date matching

Values are normalised into the “YYYYMMDD” format before matching is performed.

Rules for matching:

  • String compare of normalised form.
  • Exact match if all numeric digits are equal.
  • Partial match for similarity ratio above 90%.

Examples on date matching:

sourcetargetExact matchPartial match
1985-10-2019851020truetrue
1985-10-2019851022falsetrue
1985-10-2019990520falsefalse

Match the front and the back of a document

Conditions

You can match the front and back of a document under the following conditions only:

  • The document is supported by Signicat Paper (you can use the Get Document Types service to know which documents these are).
  • The document must have an MRZ area.
  • At least one of the fields in the MRZ area must be a text field on the opposite side of the document. To know which fields this could be, see the API reference > Get process description of mrz under the providerSpecific object.

For example, you can match the front and the back of a Dutch passport by checking the personal number (aka BSN) because it exists both on the front of the document (in the MRZ area) and on the back side of the document (in a textual field).

Here is an example of an NLD passport showing the personal number (BSN) in the front side of the document:

Front matching

Front matching

And the same personal number on the backside of the document:

Back matching

Back matching

For this case, you should expect that the value of providerSpecific > mrzFeatureMatching in the Get Process response to be FULL_MATCH (for more information about possible values, see the API Reference > Get process description). Example:

{
"status": ...,
"processId": "e1cb7081-4187-413b-8677-7264de8eee18",
"provider": "signicatpaper",
"providerSpecific": {
"verification": {
"type": "MRZ_FEATURE_COMPARISON",
"status": "true"
},
"features": {
...
"personalIdentificationNumber": "999999990"
},
"mrz": {
...
"personalIdentificationNumber": "999999990"
},
"mrzChecksum": {
...
"personalIdentificationNumber": "VALID"
},
"mrzVerification": {
...
},
"mrzFeatureMatching": {
...
"personalIdentificationNumber": "FULL_MATCH"
}
...
}

Here is how to use the Matching feature:

How to use matching in the generic flow

In the generic flow:

  1. Create a new process with signicatpaper as a provider.
  2. Upload the images directly to that process.
  3. Start verification.
  4. When the verification is finished, use the Get process service to obtain information about the result.
  5. In the paper-specific fields of that result, check the mrzFeatureMatching element and look for the field that you know exists in both the MRZ and on the opposite side of the document. In the example above, it would be the personalIdentificationNumber field.
  6. Make sure the value of that field is FULL_MATCH. This means the value of the field in the MRZ is exactly the same as the value of the text field on the other side, i.e. it belongs to the same document. For more information about possible values, see mrzFeatureMatching in the API Reference > Get process description.

How to use matching in the alternative flow

In the alternative flow (web only):

  1. Use the Start capture flow service with signicatpaper as a provider.
  2. After the end-user has captured the images and the verification is finished, use the Get process service to obtain information about the result.
  3. The next steps are the same as step 5 and 6 above in the generic flow.

If you want to use the matching service but you use another provider to perform the eIDV, you can use the images from that provider and create an additional process with signicatpaper, and then follow the steps indicated in the generic flow above.

Onfido data comparison

The Onfido provider allows asserting whether the data in the document is consistent with the data provided by the end-user. The following fields can be used for comparison:

  • firstName
  • lastName

The Onfido comparison system uses a Levenshtein-like fuzzy matching for these fields. The purpose of this inexact matching is to avoid unnecessary failures if the names are mathematically close enough.

  1. This option is switched off by default. To enable data comparison with Onfido, you need to contact us by creating a support ticket in the Signicat Dashboard.

  2. In the Create process request, you must always provide a firstName and lastName. For example, you can ask the end-user to provide this data in a form. Otherwise, you will only obtain inconclusive results.

    Request example:

    curl --location --request POST 'https://api.signicat.com/assure/dossiers/<dossierId>/processes' \
    --header 'Authorization: Bearer <token>' \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    "provider": "onfido",
    "firstName": "Maria Paula",
    "lastName": "Santos Mendes"
    }'
  3. In the process result, you will see a dataComparison field that indicates if the data matched (clear) or not (consider).