# 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.

You can use this service to compare information in two data nodes of a dossier. These nodes can be:

Tip: Contact Signicat if you need other matching services than the ones described in this section.


  • All data nodes must exist inside the same dossier.
  • To have a finalResult, the process must have been “accepted”.

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

Field Matching algorithm
firstName String matching
lastName String matching
dateOfBirth Date matching

# 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:

source target Exact match Partial match
Ana Ana true true
ana Ana true true
ANA Ana true true
Ana Maria Ana false true
Anita Ana false true
Maria Ana false false

# 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:

source target Exact match Partial match
1985-10-20 19851020 true true
1985-10-20 19851022 false true
1985-10-20 19990520 false false

# Match the front and the back of a document

Note: It is only possible to use this feature if the following conditions apply:

  • 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. See the existing fields in the providerSpecific > mrzFeatureMatching field of a Signicat Paper result to know which fields you can use to do this.

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:


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


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 OpenAPI documentation > Get process endpoint 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 this feature:

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 mrzFeatrueMatching in the OpenAPI documentation > Get process endpoint description.

In the alternative flow:

  1. Start Capture Flow 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 this feature but you do not use Signicat Paper to perform the eIDV (i.e. you are using one of the third-party providers), you can use the images from that provider’s process to create a new process using Signicat Paper and 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.

This option is switched off by default and can be enabled if needed (contact Signicat to do so). Note: If this option is enabled, you must always provide a firstName and lastName when creating a process. For example, you can ask the end-user to provide this data in a form. Otherwise, you will only obtain inconclusive results.

# How to use Onfido data comparison

  1. Ask Signicat to enable this option in your service.

  2. In the Create process request, make sure to always send the firstName and lastName parameters, for example:

    curl --location --request POST '<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”).

Last updated: 20/09/2023 12:20 UTC