# 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:
- The final result of two processes.
- The dossier’s userData and a process’s final result.
Tip: Contact Signicat if you need other matching services than the ones described in this section.
Notes:
- 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:
- Create a new process with
signicatpaper
as a provider. - Upload the images directly to that process.
- Start verification.
- When the verification is finished, use the Get process service to obtain information about the result.
- 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. - 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:
- Start Capture Flow with
signicatpaper
as a provider. - After the end-user has captured the images and the verification is finished, use the Get process service to obtain information about the result.
- 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
Ask Signicat to enable this option in your service.
In the Create process request, make sure to always send the firstName and lastName parameters, for example:
curl --location --request POST 'https://preprod.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" }'
In the process result, you will see a dataComparison field that indicates if the data matched (“clear”) or not (“consider”).