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

# Database Validation Matching Methods

> How 1x1 and 2x2 outcomes are derived from per-service matches: fuzzy name thresholds, partialMatchAction rules, waterfall logic. From $0.05/check.

Didit's [Database Validation](/core-technology/database-validation/overview) API checks identity data against the authoritative civil registry, tax authority or electoral roll for each country — RENAPER (Argentina), Receita Federal (Brazil), Tribunal Electoral (Panama), RENAPO (Mexico), Junta Central Electoral (Dominican Republic), Registraduría Nacional (Colombia) and more. Each query is billed per successful call, from **\$0.05/check** with no monthly minimums.

Outcomes are derived from per-service results: **1×1** when a single registry returns a full match, **2×2** when two independent registries corroborate the data. This page documents how those outcomes are computed, the fuzzy-match thresholds applied to names, and the decision logic that governs `partialMatchAction` and `noMatchAction` in your workflow rules.

## 1×1 matching

This method involves matching one input data point (typically a national ID or similar identifier) against our database. If a direct match is found, we confirm the identity. However, if the initial attempt fails, we may try alternate trusted data sources in a waterfall sequence. This means we continue validating through successive providers until we either achieve a match or exhaust all options. Importantly, a partial match does not stop the process—we only stop once we find a full and conclusive match or determine that no match exists.

The 1x1 Matching logic requires matching a user’s personal data against one source to receive a <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> on their identity.\*

| Verification Result                                                                                                        | Name Category                                                                                                              | ID Category                                                                                                             | Date of Birth Category |
| :------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------- | :--------------------- |
| <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    | <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    | <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> | Any Value              |
| <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> | <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> | <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> | Any Value              |
| <span style={{backgroundColor: '#FEEFEE', color: '#FF4140', padding: '2px 5px', borderRadius: '3px'}}>No Match</span>      | All other combinations                                                                                                     |                                                                                                                         |                        |

*\*The applicable country sources are screened until a Full Match on the identity is made. If a Full Match is not found, the system then repeatedly screens those sources for a Partial Match on the user’s identity.*

## 2×2 matching

This method requires matching two input data points (e.g., name + date of birth, or national ID + phone number) against two corresponding fields in our database. Just like with 1x1, we follow a waterfall approach, querying multiple data sources sequentially. We persist through each step until we find a complete match across both data fields. Partial or single-field matches are not sufficient; the validation process continues until a definitive 2-field match is achieved or all sources have been checked.

The 2x2 Matching logic requires matching a user’s personal data against two sources to receive a <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> on their identity.\*

| Verification Result                                                                                                        | 1st Data Source                                                                                                                                                                                                                                                       | 2nd Data Source                                                                                                                                                                                                                                                       |
| :------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    | Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + National ID <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    | Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + National ID <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    |
| <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    | Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + National ID <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    | Name <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> + National ID <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> |
| <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    | Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + National ID <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    | Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + Date of Birth <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>  |
| <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    | Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + National ID Any Value                                                                                                                  | Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + National ID Any Value                                                                                                                  |
| <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> | Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + National ID <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>    |                                                                                                                                                                                                                                                                       |
| <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> | Name <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> + National ID <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> |                                                                                                                                                                                                                                                                       |
| <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> | Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + Date of Birth <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>  |                                                                                                                                                                                                                                                                       |
| <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> | Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + National ID Any Value                                                                                                                  |                                                                                                                                                                                                                                                                       |
| <span style={{backgroundColor: '#FEEFEE', color: '#FF4140', padding: '2px 5px', borderRadius: '3px'}}>No Match</span>      | All other combinations                                                                                                                                                                                                                                                |                                                                                                                                                                                                                                                                       |

*\*The applicable country sources are screened until a Full Match on the identity is made. If a Full Match is not found, the system then repeatedly screens those sources for a Partial Match on the user’s identity.*

***

## Data category and attribute matching

The following are the scenarios that result in a <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> for the Name, Date of Birth, and ID data categories. A <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> is only possible for the Name category.

### Name category matching

A **<span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>** on the Name category is considered when any of the following data attribute matching scenarios is met:

* Full Name Concatenation <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> (First Name + Last Name combined with 85% similarity threshold)
* First Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + Last Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>
* First Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + Maternal Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>
* First Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + Paternal Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>

A **<span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span>** on the Name category is considered when any of the following data attribute matching scenarios is met:

* First Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>
* Last Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>
* Paternal Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>
* Maternal Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>
* Maternal Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + Paternal Name <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>

### Date of birth category matching

A **<span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>** on the Date of Birth category is considered only when the following data attribute matching scenario is met:

* Year of Birth <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + Month of Birth <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> + Day of Birth <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>

A <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> on the Date of Birth category is not possible.

### ID category matching

A **<span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>** on the ID category is considered only when the following data attribute matching scenario is met:

* Identification Number <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>

A <span style={{backgroundColor: '#FFF4EB', color: '#E66E01', padding: '2px 5px', borderRadius: '3px'}}>Partial Match</span> on the ID category is not possible.

***

## Fuzzy matching for data attributes

These are the criteria for fuzzy matching on different data attributes against country sources.

* **Name Data Attributes**
  For a Name category data attribute to generate a <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>, it should be within 70% of the Levenshtein character similarity in comparison to the records in the data sources. For full name concatenation (First Name + Last Name combined), a higher threshold of 85% similarity is used. E.g., if the Name attribute input is 'Christophel' and the actual name is 'Christopher', a <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> is returned based on the fuzzy matching logic. This system is applicable to the *First Name*, *Last Name*, *Paternal Name*, and *Maternal Name* data attributes.

* **Date of Birth and ID Data Attributes**
  We do not employ any kind of fuzzy matching on data attributes within the Date of Birth or ID data categories. An exact match is required for these fields.

### Examples

Below are examples of data attribute inputs that would satisfy the criteria of the fuzzy matching logic and generate a <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span>.

| Data Attribute | Input       | Data Source Record | Result                                                                                                                  |
| :------------- | :---------- | :----------------- | :---------------------------------------------------------------------------------------------------------------------- |
| first\_name    | Christopher | Christopher        | <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> |
| first\_name    | Christophel | Christopher        | <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> |
| first\_name    | Chris       | Christopher        | <span style={{backgroundColor: '#FEEFEE', color: '#FF4140', padding: '2px 5px', borderRadius: '3px'}}>No Match</span>   |
| last\_name     | Smith       | Smith              | <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> |
| last\_name     | Smyth       | Smith              | <span style={{backgroundColor: '#EBFAF1', color: '#42D97F', padding: '2px 5px', borderRadius: '3px'}}>Full Match</span> |
| last\_name     | Smitty      | Smith              | <span style={{backgroundColor: '#FEEFEE', color: '#FF4140', padding: '2px 5px', borderRadius: '3px'}}>No Match</span>   |

## See also

* [Database Validation overview](/core-technology/database-validation/overview) — how the API works end-to-end, supported registries, pricing.
* [Outcome Codes](/core-technology/database-validation/database-validation-outcome-codes) — full list of provider response codes (deceased, minor, document not found, biometric mismatch).
* [Warnings](/core-technology/database-validation/database-validation-warnings) — what we surface when a service can't run due to missing input.
* [Supported Countries & Services](/core-technology/database-validation/database-validation-supported-countries) — every live registry, required fields and per-call price.
* [Reports](/core-technology/database-validation/database-validation-report) — monthly per-service billing exports.
