VOP matching algorithm
Learn more about the Mambu Payments (formerly Numeral) VOP matching algorithm
Mambu Payments compares the payee name in an incoming VOP request against all account holder names associated with the account, returning a match, close_match, or no_match result based on configurable distance measures and thresholds.
Disclaimer: This guide supplements – but does not replace – the EPC VOP Scheme Rulebook and the EPC Recommendations for the Matching Processes under the VOP Scheme Rulebook. The matching algorithm complies with the EU Instant Payments Regulation (EU 2024/886).
How it works
For each incoming VOP request, Mambu Payments:
- Retrieves all holder names for the account (main and alternative names).
- Cleans both the received name and the stored names using standardised data cleaning rules.
- Compares the received name against each stored name using your configured distance measure.
- If no direct match is found and the stored name has four words or fewer, computes all word-order variants and compares each one.
- Returns the result based on the highest matching score across all comparisons.
Where account holder names come from depends on your integration mode:
| Integration mode | Name source |
|---|---|
| Synchronised accounts | holder_name and alternative_holder_names on the internal account object |
| Account holder information requests | payee_identification in your system's response |
Data cleaning
Both the received name and stored names go through the following cleaning steps before comparison:
| Step | Rule | Example |
|---|---|---|
| Case normalisation | Convert all letters to lowercase | Jean Dupont → jean dupont |
| Accent removal | Remove standard accents and diacritical marks | é → e |
| Special character replacement | Replace characters with Latin equivalents | ø → oe, ß → ss |
| Punctuation and symbol removal | Remove all punctuation, symbols, and emoji. Keep only a–z and 0–9 | Dupont & Co. → dupont co |
| Whitespace normalisation | Trim leading and trailing spaces. Collapse multiple spaces into one | Jean Dupont → jean dupont |
| Title removal | Remove common English and French honorific titles | Mr, Dr, Mme, Prof |
| Legal form removal | Remove common European company legal form abbreviations | GmbH, SAS, BV, Ltd |
Distance measures
Mambu Payments calculates a distance score representing how similar two names are. Choose one of two supported measures for your configuration.
Levenshtein distance. Counts the minimum number of single-character edits (insertions, deletions, substitutions) needed to transform one name into the other. Best for detecting overall string differences.
Jaro-Winkler distance. Evaluates shared characters and transpositions, with higher weight given to matching characters at the start of the string. More effective for common name variations and misspellings where the prefix is consistent.
The raw distance is normalised to a matching score from 0 to 100 by dividing by the character count of the stored name.
Thresholds and results
Configure two thresholds to control how matching scores translate into results:
| Score range | Result |
|---|---|
| At or above the upper threshold | match |
| Between the upper and lower threshold | close_match |
| Below the lower threshold | no_match |
Adjust the upper and lower thresholds to balance matching sensitivity against your risk tolerance.
Variant computation
When no direct match is found and the stored name contains four words or fewer, Mambu Payments generates all possible word-order permutations and compares each one against the received name.
For example, for a stored name "John Michael Doe", the algorithm compares the received name against: "John Michael Doe", "John Doe Michael", "Michael John Doe", "Michael Doe John", "Doe John Michael", and "Doe Michael John".
The highest score across all permutations determines the final result.
Names with more than four words are compared as-is without variant computation.
Multiple holder names
Associate multiple names with the same account to handle joint accounts, middle name variations, and alternative company names.
| Use case | Example |
|---|---|
| Joint accounts | Both "Jean Dupont" and "Marie Dupont" are registered as holders |
| Middle names | "Jean Michel Dupont" and "Jean Dupont" are both stored |
| Company name variants | "Acme SAS" (legal name) and "Acme" (commercial name) are both stored |
Synchronised accounts. Populate alternative_holder_names on the internal account object alongside holder_name.
Account holder information requests. Return multiple values in the payee_identification array in your response.
When multiple names are stored, Mambu Payments compares the received name against all of them and bases the result on the pair with the highest matching score.
Related
Updated 4 days ago
