From 2b2596d37ef09da7fdef6612726e5cd7553527ef Mon Sep 17 00:00:00 2001 From: Slawomir Jaranowski Date: Tue, 17 Dec 2024 22:56:05 +0100 Subject: [PATCH] Improve IBANValidatorTest - use registry from swift - add iban_registry_v98.txt from swift site - use parametrized test --- pom.xml | 18 +- src/changes/changes.xml | 5 +- .../validator/routines/IBANValidatorTest.java | 267 ++++++++++-------- .../validator/routines/iban_registry_v98.txt | 59 ++++ 4 files changed, 225 insertions(+), 124 deletions(-) create mode 100644 src/test/resources/org/apache/commons/validator/routines/iban_registry_v98.txt diff --git a/pom.xml b/pom.xml index e1b50db93..1fceff127 100644 --- a/pom.xml +++ b/pom.xml @@ -91,6 +91,15 @@ clean verify apache-rat:check japicmp:cmp checkstyle:check spotbugs:check pmd:check javadoc:javadoc + + org.apache.rat + apache-rat-plugin + + + src/test/resources/org/apache/commons/validator/routines/iban_registry_v98.txt + + + com.github.spotbugs spotbugs-maven-plugin @@ -256,15 +265,6 @@ - - org.apache.rat - apache-rat-plugin - - - site-content/** - - - com.github.spotbugs spotbugs-maven-plugin diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 05a0c03e8..3bb8d6c2f 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -68,8 +68,9 @@ The type attribute can be add,update,fix,remove. Fix order of actual and expected parameters in assertEquals() #246. InetAddressValidator does not need its instance variable, so uses a touch less memory. - IBANValidator: - add Yemen - Add IBANValidator.Validator.getIbanLength(). + Improve IBANValidatorTest - use registry from swift + IBANValidator: - add Yemen + Add IBANValidator.Validator.getIbanLength(). Bump org.apache.commons:commons-parent from 70 to 78 #231, #245, #253, #256, #262, #267, #272, #278. Bump commons-logging:commons-logging from 1.3.2 to 1.3.4 #238, #254. diff --git a/src/test/java/org/apache/commons/validator/routines/IBANValidatorTest.java b/src/test/java/org/apache/commons/validator/routines/IBANValidatorTest.java index 42566d506..63e0fe634 100644 --- a/src/test/java/org/apache/commons/validator/routines/IBANValidatorTest.java +++ b/src/test/java/org/apache/commons/validator/routines/IBANValidatorTest.java @@ -24,19 +24,30 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStreamReader; import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import org.apache.commons.validator.routines.IBANValidator.Validator; import org.apache.commons.validator.routines.checkdigit.IBANCheckDigit; +import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.FieldSource; +import org.junit.jupiter.params.provider.MethodSource; /** * Tests {@link IBANValidator}. @@ -50,13 +61,13 @@ public class IBANValidatorTest { private static final String IBAN_PART = "(?:(\\d+)!([acn]))"; // Assume all parts are fixed length private static final Pattern IBAN_PAT = Pattern - .compile("([A-Z]{2})" + IBAN_PART + IBAN_PART + IBAN_PART + IBAN_PART + "?" + IBAN_PART + "?" + IBAN_PART + "?" + IBAN_PART + "?"); + .compile(IBAN_PART + IBAN_PART + IBAN_PART + IBAN_PART + "?" + IBAN_PART + "?" + IBAN_PART + "?" + IBAN_PART + "?"); // It's not clear whether IBANs can contain lower case characters // so we test for both where possible // Note that the BIC near the start of the code is always upper case or digits // @formatter:off - private static final String[] VALID_IBAN_FIXTURES = { + private static final List VALID_IBAN_FIXTURES = Arrays.asList( "AD1200012030200359100100", "AE070331234567890123456", "AL47212110090000000235698741", @@ -172,12 +183,12 @@ public class IBANValidatorTest { "VA59001123000012345678", "VG96VPVG0000012345678901", "XK051212012345678906", - "YE15CBYE0001018861234567891234", - }; + "YE15CBYE0001018861234567891234" + ); // @formatter:on // @formatter:off - private static final String[] INVALID_IBAN_FIXTURES = { + private static final List INVALID_IBAN_FIXTURES = Arrays.asList( "", // empty " ", // empty "A", // too short @@ -189,89 +200,22 @@ public class IBANValidatorTest { "RO49AAAA1b31007593840000", // lowercase version "LC62HEMM000100010012001200023015", // wrong in SWIFT "BY00NBRB3600000000000Z00AB00", // Wrong in SWIFT v73 - "ST68000200010192194210112", // ditto + "ST68000200010192194210112", // ditto - invalid example "SV62CENR0000000000000700025", // ditto - }; + "NI04BAPR00000013000003558124", // invalid example + "RU1704452522540817810538091310419" // invalid example + ); // @formatter:on - private static int checkIBAN(final File file, final IBANValidator val) throws Exception { - // The IBAN Registry (TXT) file is a TAB-separated file - // Rows are the entry types, columns are the countries - final CSVFormat format = CSVFormat.DEFAULT.builder().setDelimiter('\t').build(); - final Reader rdr = new InputStreamReader(new FileInputStream(file), "ISO_8859_1"); - try (final CSVParser p = new CSVParser(rdr, format)) { - CSVRecord country = null; - CSVRecord cc = null; - CSVRecord structure = null; - CSVRecord length = null; - for (final CSVRecord o : p) { - final String item = o.get(0); - switch (item) { - case "Name of country": - country = o; - break; - case "IBAN prefix country code (ISO 3166)": - cc = o; - break; - case "IBAN structure": - structure = o; - break; - case "IBAN length": - length = o; - break; - default: - break; - } - } - assertNotNull(country); - assertNotNull(length); - assertNotNull(structure); - assertNotNull(cc); - for (int i = 1; i < country.size(); i++) { - try { - - final String newLength = length.get(i).split("!")[0]; // El Salvador currently has "28!n" - final String newRE = fmtRE(structure.get(i), Integer.parseInt(newLength)); - final Validator valre = val.getValidator(cc.get(i)); - if (valre == null) { - System.out.println("// Missing entry:"); - printEntry(cc.get(i), newLength, newRE, country.get(i)); - } else { - final String currentLength = Integer.toString(valre.getIbanLength()); - final String currentRE = valre.getRegexValidator().toString().replaceAll("^.+?\\{(.+)}", "$1") // Extract RE from RegexValidator{re} - // string - .replace("\\d", "\\\\d"); // convert \d to \\d - // The above assumes that the RegexValidator contains a single Regex - if (currentRE.equals(newRE) && currentLength.equals(newLength)) { - - } else { - System.out.println("// Expected: " + newRE + ", " + newLength + " Actual: " + currentRE + ", " + currentLength); - printEntry(cc.get(i), newLength, newRE, country.get(i)); - } - - } - - } catch (final IllegalArgumentException e) { - e.printStackTrace(); - } - } - p.close(); - return country.size(); - } - } - - private static String fmtRE(final String ibanPat, final int ibanLen) { + private static String fmtRE(final String ibanPat) { final Matcher m = IBAN_PAT.matcher(ibanPat); if (!m.matches()) { throw new IllegalArgumentException("Unexpected IBAN pattern " + ibanPat); } final StringBuilder sb = new StringBuilder(); - final String cc = m.group(1); // country code - int totalLen = cc.length(); - sb.append(cc); - int len = Integer.parseInt(m.group(2)); // length of part - String curType = m.group(3); // part type - for (int i = 4; i <= m.groupCount(); i += 2) { + int len = Integer.parseInt(m.group(1)); // length of part + String curType = m.group(2); // part type + for (int i = 3; i <= m.groupCount(); i += 2) { if (m.group(i) == null) { // reached an optional group break; } @@ -281,16 +225,11 @@ private static String fmtRE(final String ibanPat, final int ibanLen) { len += count; } else { sb.append(formatToRE(curType, len)); - totalLen += len; curType = type; len = count; } } sb.append(formatToRE(curType, len)); - totalLen += len; - if (ibanLen != totalLen) { - throw new IllegalArgumentException("IBAN pattern " + ibanPat + " does not match length " + ibanLen); - } return sb.toString(); } @@ -299,7 +238,7 @@ private static String formatToRE(final String type, final int len) { final char ctype = type.charAt(0); // assume type.length() == 1 switch (ctype) { case 'n': - return String.format("\\\\d{%d}", len); + return String.format("\\d{%d}", len); case 'a': return String.format("[A-Z]{%d}", len); case 'c': @@ -309,21 +248,125 @@ private static String formatToRE(final String type, final int len) { } } - public static void main(final String[] a) throws Exception { - final IBANValidator validator = new IBANValidator(); - final File ibanTsv = new File("target", "iban-registry.tsv"); - int countries = 0; - if (ibanTsv.canRead()) { - countries = checkIBAN(ibanTsv, validator); - } else { - System.out.println("Please load the file " + ibanTsv.getCanonicalPath() + " from https://www.swift.com/standards/data-standards/iban"); + static Collection ibanRegistryV98Source() throws Exception { + Path ibanRegistryV98 = Paths.get(IBANValidator.class.getResource("iban_registry_v98.txt").toURI()); + + final CSVFormat format = CSVFormat.DEFAULT.builder().setDelimiter('\t').build(); + final Reader rdr = Files.newBufferedReader(ibanRegistryV98, StandardCharsets.ISO_8859_1); + + CSVRecord country = null; + CSVRecord cc = null; + CSVRecord additionalCc = null; + CSVRecord structure = null; + CSVRecord length = null; + + try (final CSVParser p = new CSVParser(rdr, format)) { + for (final CSVRecord o : p) { + final String item = o.get(0); + switch (item) { + case "Name of country": + country = o; + break; + case "IBAN prefix country code (ISO 3166)": + cc = o; + break; + case "Country code includes other countries/territories": + additionalCc = o; + break; + case "IBAN structure": + structure = o; + break; + case "IBAN length": + length = o; + break; + default: + break; + } + } + } + + assertNotNull(country); + assertNotNull(cc); + assertNotNull(additionalCc); + assertNotNull(structure); + assertNotNull(length); + + Collection result = new ArrayList<>(); + for (int i = 1; i < country.size(); i++) { + String ac = additionalCc.get(i); + List aCountry = Arrays.stream(ac.split(",")) + .filter(s -> !"N/A".equals(s)) + .map(s -> s.replace("(French part)", "")) // special case + .map(String::trim) + .filter(s -> !s.isEmpty()) + .collect(Collectors.toList()); + result.add(Arguments.of(country.get(i), cc.get(i), aCountry, Integer.parseInt(length.get(i)), structure.get(i))); + } + + return result; + } + + static Collection ibanRegistryV98SourceExamples() throws Exception { + Path ibanRegistryV98 = Paths.get(IBANValidator.class.getResource("iban_registry_v98.txt").toURI()); + + final CSVFormat format = CSVFormat.DEFAULT.builder().setDelimiter('\t').build(); + final Reader rdr = Files.newBufferedReader(ibanRegistryV98, StandardCharsets.ISO_8859_1); + + CSVRecord country = null; + CSVRecord electronicExample = null; + + try (final CSVParser p = new CSVParser(rdr, format)) { + for (final CSVRecord o : p) { + final String item = o.get(0); + switch (item) { + case "Name of country": + country = o; + break; + case "IBAN electronic format example": + electronicExample = o; + break; + default: + break; + } + } } - System.out.println("Processed " + countries + " countries."); + + assertNotNull(country); + assertNotNull(electronicExample); + + Collection result = new ArrayList<>(); + for (int i = 1; i < country.size(); i++) { + result.add(Arguments.of(country.get(i), electronicExample.get(i))); + } + + return result; } - private static void printEntry(final String ccode, final String length, final String ib, final String country) { - final String fmt = String.format("\"%s\"", ib); - System.out.printf(" new Validator(\"%s\", %s, %-40s), // %s\n", ccode, length, fmt, country); + @ParameterizedTest + @MethodSource("ibanRegistryV98Source") + public void validatorShouldExistWithProperConfiguration(String countryName, String countryCode, List acountyCode, int ibanLength, String structure) throws Exception { + String countryInfo = " countryCode: " + countryCode + ", countryName: " + countryName; + Validator validator = IBANValidator.getInstance().getValidator(countryCode); + + assertNotNull(validator, "IBAN validator returned null for" + countryInfo); + assertEquals(ibanLength, validator.getIbanLength(), "IBAN length should be " + ibanLength + " for" + countryInfo); + + List allPatterns = Arrays.stream(validator.getRegexValidator().getPatterns()).map(Pattern::pattern).collect( + Collectors.toList()); + + String re = fmtRE(structure.substring(2)); + assertTrue(allPatterns.remove(countryCode + re), "No pattern " + countryCode + re + " found for " + countryInfo); + for (String ac : acountyCode) { + assertTrue(allPatterns.remove(ac + re), "No additional country code " + ac + " found for " + countryInfo); + } + assertTrue(allPatterns.isEmpty(), "Unrecognized patterns: " + allPatterns + " for" + countryInfo); + } + + @ParameterizedTest + @MethodSource("ibanRegistryV98SourceExamples") + public void exampleAccountsShouldBeValid(String countryName, String example) { + Assumptions.assumeFalse(INVALID_IBAN_FIXTURES.contains(example), "Skip invalid example: " + example + " for " + countryName); + assertTrue(IBANValidator.getInstance().isValid(example), "IBAN validator returned false for " + example + " for " + countryName); } @Test @@ -343,11 +386,10 @@ public void testHasValidator() { assertFalse(VALIDATOR.hasValidator("gb"), "gb"); } - @Test - public void testInValid() { - for (final String f : INVALID_IBAN_FIXTURES) { - assertFalse(VALIDATOR.isValid(f), f); - } + @ParameterizedTest + @FieldSource("INVALID_IBAN_FIXTURES") + public void testInValid(String invalidIban) { + assertFalse(VALIDATOR.isValid(invalidIban), invalidIban); } @Test @@ -408,12 +450,11 @@ public void testSorted() { } } - @Test - public void testValid() { - for (final String f : VALID_IBAN_FIXTURES) { - assertTrue(IBANCheckDigit.IBAN_CHECK_DIGIT.isValid(f), "Checksum fail: " + f); - assertTrue(VALIDATOR.hasValidator(f), "Missing validator: " + f); - assertTrue(VALIDATOR.isValid(f), f); - } + @ParameterizedTest + @FieldSource("VALID_IBAN_FIXTURES") + public void testValid(String iban) { + assertTrue(IBANCheckDigit.IBAN_CHECK_DIGIT.isValid(iban), "Checksum fail: " + iban); + assertTrue(VALIDATOR.hasValidator(iban), "Missing validator: " + iban); + assertTrue(VALIDATOR.isValid(iban), iban); } } diff --git a/src/test/resources/org/apache/commons/validator/routines/iban_registry_v98.txt b/src/test/resources/org/apache/commons/validator/routines/iban_registry_v98.txt new file mode 100644 index 000000000..ab8348034 --- /dev/null +++ b/src/test/resources/org/apache/commons/validator/routines/iban_registry_v98.txt @@ -0,0 +1,59 @@ +# source: https://www.swift.com/standards/data-standards/iban-international-bank-account-number + +Data element Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example Description - Pattern - Example +Name of country Andorra United Arab Emirates (The) Albania Austria Azerbaijan Bosnia and Herzegovina Belgium Bulgaria Bahrain Burundi Brazil Republic of Belarus Switzerland Costa Rica Cyprus Czechia Germany Djibouti Denmark Dominican Republic Estonia Egypt Spain Finland Falkland Islands Faroe Islands France United Kingdom Georgia Gibraltar Greenland Greece Guatemala Croatia Hungary Ireland Israel Iraq Iceland Italy Jordan Kuwait Kazakhstan Lebanon Saint Lucia Liechtenstein Lithuania Luxembourg Latvia Libya Monaco Moldova Montenegro Macedonia Mongolia Mauritania Malta Mauritius Nicaragua Netherlands (The) Norway Oman Poland "Palestine, State of" Portugal Qatar Romania Serbia Russia Saudi Arabia Seychelles Sudan Sweden Slovenia Slovakia San Marino Somalia Sao Tome and Principe El Salvador Timor-Leste Tunisia Turkey Ukraine Vatican City State Virgin Islands Kosovo Yemen +IBAN prefix country code (ISO 3166) AD AE AL AT AZ BA BE BG BH BI BR BY CH CR CY CZ DE DJ DK DO EE EG ES FI FK FO FR GB GE GI GL GR GT HR HU IE IL IQ IS IT JO KW KZ LB LC LI LT LU LV LY MC MD ME MK MN MR MT MU NI NL NO OM PL PS PT QA RO RS RU SA SC SD SE SI SK SM SO ST SV TL TN TR UA VA VG XK YE +Country code includes other countries/territories N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A AX N/A N/A "GF, GP, MQ, RE, PF, TF, YT, NC, BL, MF (French part), PM, WF" "IM, JE, GG" N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A +SEPA country Yes No No Yes No No Yes Yes No No No No Yes No Yes Yes Yes No Yes No Yes No Yes Yes No No Yes Yes No Yes No Yes No Yes Yes Yes No No No Yes No No No No No Yes Yes Yes Yes No Yes No No No No No Yes No No Yes Yes No Yes No Yes No Yes No No No No No Yes Yes Yes Yes No No No No No No No Yes No No No +SEPA country also includes N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A �N/A N/A AX N/A N/A "GF, GP, MQ, YT, RE, PM, BL, MF" N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A "Azores, Madeira" N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A +Domestic account number example 2030200359100100 1234567890123456 0000000235698741 BLZ 19043 Kto 234573201 NABZ00000000137010001944 199-044-00012002-79 BE68 5390 0754 7034 N/A 00001299123456 00003320451 81 0009795493C1 3600 0000 0000 0Z00 AB00 762 1162-3852.957 02001026284066 0000001200527600 19-2000145399/0800 532013000 0154000100186 0040 0440116243 00000001212453611324 221020145685 000263180002 2100 0418 45 0200051332 123456789012 6460 0001631634 20041 01005 0500013M026 06 60-16-13 31926819 0000000101904917 0000 00007099 453 6471 0001000206 01250000000012300695 01020000001210029690 1001005-1863000160 11773016-11111018-00000000 93-11-52 12345678 10-800-99999999 123456789012 0159-26-007654-551073-0339 X 05428 11101 000000123456 0001310000302 1234560101 KZ86 125K ZT50 0410 0100 01 001 901229114 0001 0001 0012 0012 0002 3015 8810 2324013AA N/A N/A LV80 BANK 0000 4351 9500 1 000020100120361 0011111000h 000225100013104168 505 0000123456789 51 MK07 300 0000000424 25 1234 5678 9123 00020 00101 00001234567 53 12345MTLCAST001S MU17 BOMM 0101 1010 3030 0200 000M UR 00000013000003558124 041 71 64 300 8601 11 17947 0000001299123456 61 1090 1014 0000 0712 1981 2874 400123456702 0002.0123.12345678901.54 00001234567890ABCDEFG RO49 AAAA 1B31 0075 9384 0000 260-0056010016113-79 40817 810 5 3809 1310419 608010167519 0000000000001497 010501234001 1234 12 3456 1 2633 0001 2039 086 19-8742637541/1200 N/A 001000100141 01921942101.12 00000000000000700025 008 00123456789101 57 10 006 0351835984788 31 26007233566001 123000012345678 00000 12 345 678 901 1212 0123456789 06 018861234567891234 +BBAN +BBAN structure 4!n4!n12!c 3!n16!n 8!n16!c 5!n11!n 4!a20!c 3!n3!n8!n2!n 3!n7!n2!n 4!a4!n2!n8!c 4!a14!c 5!n5!n11!n2!n 8!n5!n10!n1!a1!c 4!c4!n16!c 5!n12!c 4!n14!n 3!n5!n16!c 4!n6!n10!n 8!n10!n 5!n5!n11!n2!n 4!n9!n1!n 4!c20!n 2!n2!n11!n1!n 4!n4!n17!n 4!n4!n1!n1!n10!n 3!n11!n 2!a12!n 4!n9!n1!n 5!n5!n11!c2!n 4!a6!n8!n 2!a16!n 4!a15!c 4!n9!n1!n 3!n4!n16!c 4!c20!c 7!n10!n 3!n4!n1!n15!n1!n 4!a6!n8!n 3!n3!n13!n 4!a3!n12!n 4!n2!n6!n10!n 1!a5!n5!n12!c 4!a4!n18!c 4!a22!c 3!n13!c 4!n20!c 4!a24!c 5!n12!c 5!n11!n 3!n13!c 4!a13!c 3!n3!n15!n 5!n5!n11!c2!n 2!c18!c 3!n13!n2!n 3!n10!c2!n 4!n12!n 5!n5!n11!n2!n 4!a5!n18!c 4!a2!n2!n12!n3!n3!a 4!a20!n 4!a10!n 4!n6!n1!n 3!n16!c 8!n16!n 4!a21!c 4!n4!n11!n2!n 4!a21!c 4!a16!c 3!n13!n2!n 9!n5!n15!c 2!n18!c 4!a2!n2!n16!n3!a 2!n12!n 3!n16!n1!n 5!n8!n2!n 4!n6!n10!n 1!a5!n5!n12!c 4!n3!n12!n 4!n4!n11!n2!n 4!a20!n 3!n14!n2!n 2!n3!n13!n2!n 5!n1!n16!c 6!n19!c 3!n15!n 4!a16!n 4!n10!n2!n 4!a4!n18!c +BBAN length 20 19 24 16 24 16 12 18 18 23 25 24 17 18!n 24 20 18 23 14 24 16 25! 20 14 14 14 23 18 18 19 14 23 24 17 24 18 19 19 22 23 26 26 16 24 28 17 16 16 17 21 23 20 18 15 16 23 27 26 24 14 11 19 24 25 21 25 20 18 29 20 27 14!n 20 15 20 23 19 21 24 19 20 22 25 18 20 16 26 +Bank identifier position within the BBAN 1-4 1-3 1-3 1-5 1-4 1-3 1-3 1-4 1-4 1-5 1-8 1-4 1-5 1-4 1-3 1-4 1-8 1-5 1-4 1-4 1-2 1-4 1-4 1-3 1-2 1-4 1-5 1-4 1-2 1-4 1-4 1-3 1-4 1-7 1-3 1-4 1-3 1-4 1-2 2-6 5-8 1-4 1-3 1-4 1-4 1-5 1-5 1-3 1-4 1-3 1-5 1-2 1-3 1-3 1-4 1-5 1-4 1-6 1-4 1-4 1-4 1-3 N/A 1-4 1-4 1-4 1-4 1-3 1-9 1-2 1-6 1-2 1-3 "1-5 +" 1-4 2-6 1-4 1-4 1-4 1-3 1-2 1-5 1-6 1-3 1-4 1-2 1-4 +Bank identifier pattern 4!n 3!n 8!n 5!n 4!a 3!n 3!n 4!a 4!a 5!n 8!n 4!c 5!n 4!n 3!n 4!n 8!n 5!n 4!n 4!c 2!n 4! 4!n N/A 2!a 4!n 5!n 4!a 2!a 4!a 4!n 3!n 4!c 7!n 3!n 4!a 3!n 4 2!n 5!n 4!n 4!a 3!n 4!a 4!a 5!n 5!n 3!n 4!a 3!n 5!n 2!c 3!n 3!n 4!n 5!n 4!a 6!c 4!a 4!a 4!n 3!n N/A 4!a 4!n 4!a 4!a 3!n 9!n 2!n 4!a2!n 2!n 3!n 5!n 4!n 5!n 4!n 4!n 4!a 3!n 2!n 5!n 6!n 3!n 4!a 2!n 4!a +Branch identifier position within the BBAN 5-8 4-8 4-6 5-8 6-10 9-13 4-8 6-10 5-8 5-8 N/A 5-10 4-7 4-7 5-10 4-6 5-7 3-4 7-11 5-8 4-6 6-10 6-10 5-9 7-8 1-8 5-8 10-14 7-8 7-11 5-7 5-8 N/A 3-5 3-4 5-8 +Branch identifier pattern 4!n 5!n 3!n 4!n 5!n 5!n 5!n 5!n 4! 4!n N/A 6!n 4!n 4!n 6!n 3!n 3 2!n 5!n 4!n 3!n 5!n 5!n 5!n 2!n 8!n 4!n 5!n 2!n 5!n 3!n 4!n N/A 3!n 2!n 4!n +Bank identifier example 0001 033 212-1100-9 19043 NABZ 199 539 BNBG BMAG 10000 00360305 NBRB 00762 0152 002 0800 37040044 00010 0040 BAGR 22 0019 2100 123 SC 6460 20041 NWBK NB NWBK 6471 011 TRAJ 1001005 117 AIBK 010 NBIQ 01 05428 CBJO CBKU 125 0999 HEMM 08810 10000 001 BANK 002 11222 AG 505 300 1234 00020 MALT BOMM01 BAPR ABNA 8601 018 N/A PALS 0002 DOHB AAAA 260 044525225 80 SSCB11 29 123 26330 1200 03225 1000 0001 CENR 008 10 00061 322313 001 VPVG 12 CBYE +Branch identifier example 2030 1100 N/A 044 9661 10001 00001 N/A 00128 00000 0005 0418 N/A 601613 0125 7301 931152 800 850 59 11101 048 00001 00101 01100 01 10901014 0123 40817 01 09800 001 0001 006 12 0001 +BBAN example 00012030200359100100 0331234567890123456 212110090000000235698741 1904300234573201 NABZ00000000137010001944 1990440001200279 539007547034 BNBG96611020345678 BMAG00001299123456 10000100010000332045181 00360305000010009795493P1 NBRB 3600900000002Z00AB00 00762011623852957 15202001026284066 002001280000001200527600 08000000192000145399 370400440532013000 00010000000154000100186 00400440116243 BAGR00000001212453611324 2200221020145685 0019000500000000263180002 21000418450200051332 N/A SC123456789012 64600001631634 20041010050500013M02606 NWBK60161331926819 NB0000000101904917 NWBK000000007099453 64710001000206 01101250000000012300695 TRAJ01020000001210029690 10010051863000160 117730161111101800000000 AIBK93115212345678 010800000099999999 NBIQ850123456789012 0159260076545510730339 X0542811101000000123456 CBJO0010000000000131000302 CBKU0000000000001234560101 125KZT5004100100 0999 0000 0001 0019 0122 9114 HEMM000100010012001200023015 088100002324013AA 1000011101001000 0019400644750000 BANK0000435195001 002048000020100120361 11222 00001 01234567890 30 AG000225100013104168 505000012345678951 250120000058984 1234123456789123 00020001010000123456753 MALT011000012345MTLCAST001S BOMM0101101030300200000MUR BAPR00000013000003558124 ABNA0417164300 86011117947 0180000001299123456 109010140000071219812874 PALS000000000400123456702 000201231234567890154 DOHB00001234567890ABCDEFG AAAA1B31007593840000 260005601001611379 044525225 40817 810 5 3809 1310419 80000000608010167519 SSCB11010000000000001497USD 29010501234001 50000000058398257466 263300012039086 12000000198742637541 U0322509800000000270100 1000001001000100141 000200010192194210112 CENR00000000000000700025 0080012345678910157 10006035183598478831 0006100519786457841326 3223130000026007233566001 001123000012345678 VPVG0000012345678901 1212012345678906 CBYE0001018861234567891234 +IBAN +IBAN structure AD2!n4!n4!n12!c AE2!n3!n16!n AL2!n8!n16!c AT2!n5!n11!n AZ2!n4!a20!c BA2!n3!n3!n8!n2!n BE2!n3!n7!n2!n BG2!n4!a4!n2!n8!c BH2!n4!a14!c BI2!n5!n5!n11!n2!n BR2!n8!n5!n10!n1!a1!c BY2!n4!c4!n16!c CH2!n5!n12!c CR2!n4!n14!n CY2!n3!n5!n16!c CZ2!n4!n6!n10!n DE2!n8!n10!n DJ2!n5!n5!n11!n2!n DK2!n4!n9!n1!n DO2!n4!c20!n EE2!n2!n2!n11!n1!n EG2!n4!n4!n17!n ES2!n4!n4!n1!n1!n10!n FI2!n3!n11!n FK2!n2!a12!n FO2!n4!n9!n1!n FR2!n5!n5!n11!c2!n GB2!n4!a6!n8!n GE2!n2!a16!n GI2!n4!a15!c GL2!n4!n9!n1!n GR2!n3!n4!n16!c GT2!n4!c20!c HR2!n7!n10!n HU2!n3!n4!n1!n15!n1!n IE2!n4!a6!n8!n IL2!n3!n3!n13!n IQ2!n4!a3!n12!n IS2!n4!n2!n6!n10!n IT2!n1!a5!n5!n12!c JO2!n4!a4!n18!c KW2!n4!a22!c KZ2!n3!n13!c LB2!n4!n20!c LC2!n4!a24!c LI2!n5!n12!c LT2!n5!n11!n LU2!n3!n13!c LV2!n4!a13!c LY2!n3!n3!n15!n MC2!n5!n5!n11!c2!n MD2!n2!c18!c ME2!n3!n13!n2!n MK2!n3!n10!c2!n MN2!n4!n12!n MR2!n5!n5!n11!n2!n MT2!n4!a5!n18!c MU2!n4!a2!n2!n12!n3!n3!a NI2!n4!a20!n NL2!n4!a10!n NO2!n4!n6!n1!n OM2!n3!n16!c PL2!n8!n16!n PS2!n4!a21!c PT2!n4!n4!n11!n2!n QA2!n4!a21!c RO2!n4!a16!c RS2!n3!n13!n2!n RU2!n9!n5!n15!c SA2!n2!n18!c SC2!n4!a2!n2!n16!n3!a SD2!n2!n12!n SE2!n3!n16!n1!n SI2!n5!n8!n2!n SK2!n4!n6!n10!n SM2!n1!a5!n5!n12!c SO2!n4!n3!n12!n ST2!n4!n4!n11!n2!n SV2!n4!a20!n TL2!n3!n14!n2!n TN2!n2!n3!n13!n2!n TR2!n5!n1!n16!c UA2!n6!n19!c VA2!n3!n15!n VG2!n4!a16!n XK2!n4!n10!n2!n YE2!n4!a4!n18!c +IBAN length 24 23 28 20 28 20 16 22 22 27 29 28 21 22 28 24 22 27 18 28 20 29 24 18 18 18 27 22 22 23 18 27 28 21 28 22 23 23 26 27 30 30 20 28 32 21 20 20 21 25 27 24 22 19 20 27 31 30 28 18 15 23 28 29 25 29 24 22 33 24 31 18 24 19 24 27 23 25 28 23 24 26 29 22 24 20 30 +Effective date Apr-07 Oct-11 Apr-09 Apr-07 Jan-13 Apr-07 Apr-07 Apr-07 Jan-12 Oct-21 Jul-13 Jul-17 Apr-07 Jun-11 Apr-07 Apr-07 Jul-07 Apr-22 Apr-07 Dec-10 Apr-07 Jan-21 Apr-07 Dec-11 Jul-23 Apr-07 Apr-07 Apr-07 May-10 Apr-07 Apr-07 Apr-07 Sep-16 Apr-07 Apr-07 Apr-07 Jul-07 Jan-17 Apr-07 Jul-07 Feb-14 Jan-11 Sep-10 Jan-10 Apr-07 Apr-07 Apr-07 Apr-07 Apr-07 Jan-21 Jan-08 Jan-16 Apr-07 Apr-07 Apr-23 Jan-12 Apr-07 Apr-07 Apr-23 Apr-07 Apr-07 Mar-24 Apr-07 Jul-12 Apr-07 Jan-14 Apr-07 Apr-07 Apr-23 Jul-16 Oct-16 Jul-21 Apr-07 Apr-07 Apr-07 Aug-07 Jan-23 Sep-15 Dec-16 Sep-14 Apr-07 Apr-07 Feb-16 Mar-19 Apr-12 Sep-14 Jul-24 +IBAN electronic format example AD1200012030200359100100 AE070331234567890123456 AL47212110090000000235698741 AT611904300234573201 AZ21NABZ00000000137010001944 BA391290079401028494 BE68539007547034 BG80BNBG96611020345678 BH67BMAG00001299123456 BI4210000100010000332045181 BR1800360305000010009795493C1 BY13NBRB3600900000002Z00AB00 CH9300762011623852957 CR05015202001026284066 CY17002001280000001200527600 CZ6508000000192000145399 DE89370400440532013000 DJ2100010000000154000100186 DK5000400440116243 DO28BAGR00000001212453611324 EE382200221020145685 EG380019000500000000263180002 ES9121000418450200051332 FI2112345600000785 FK88SC123456789012 FO6264600001631634 FR1420041010050500013M02606 GB29NWBK60161331926819 GE29NB0000000101904917 GI75NWBK000000007099453 GL8964710001000206 GR1601101250000000012300695 GT82TRAJ01020000001210029690 HR1210010051863000160 HU42117730161111101800000000 IE29AIBK93115212345678 IL620108000000099999999 IQ98NBIQ850123456789012 IS140159260076545510730339 IT60X0542811101000000123456 JO94CBJO0010000000000131000302 KW81CBKU0000000000001234560101 KZ86125KZT5004100100 LB62099900000001001901229114 LC55HEMM000100010012001200023015 LI21088100002324013AA LT121000011101001000 LU280019400644750000 LV80BANK0000435195001 LY83002048000020100120361 MC5811222000010123456789030 MD24AG000225100013104168 ME25505000012345678951 MK07250120000058984 MN121234123456789123 MR1300020001010000123456753 MT84MALT011000012345MTLCAST001S MU17BOMM0101101030300200000MUR NI04BAPR00000013000003558124 NL91ABNA0417164300 NO9386011117947 OM810180000001299123456 PL61109010140000071219812874 PS92PALS000000000400123456702 PT50000201231234567890154 QA58DOHB00001234567890ABCDEFG RO49AAAA1B31007593840000 RS35260005601001611379 RU1704452522540817810538091310419 SA0380000000608010167519 SC18SSCB11010000000000001497USD SD2129010501234001 SE4550000000058398257466 SI56263300012039086 SK3112000000198742637541 SM86U0322509800000000270100 SO211000001001000100141 ST68000200010192194210112 SV62CENR00000000000000700025 TL380080012345678910157 TN5910006035183598478831 TR330006100519786457841326 UA213223130000026007233566001 VA59001123000012345678 VG96VPVG0000012345678901 XK051212012345678906 YE15CBYE0001018861234567891234 +IBAN print format example AD12 0001 2030 2003 5910 0100 AE07 0331 2345 6789 0123 456 AL47 2121 1009 0000 0002 3569 8741 AT61 1904 3002 3457 3201 AZ21 NABZ 0000 0000 1370 1000 1944 BA39 1290 0794 0102 8494 BE68 5390 0754 7034 BG80 BNBG 9661 1020 3456 78 BH67 BMAG 0000 1299 1234 56 BI42 10000 10001 00003320451 81 BR18 0036 0305 0000 1000 9795 493C 1 BY13 NBRB 3600 9000 0000 2Z00 AB00 CH93 0076 2011 6238 5295 7 CR05 0152 0200 1026 2840 66 CY17 0020 0128 0000 0012 0052 7600 CZ65 0800 0000 1920 0014 5399 DE89 3704 0044 0532 0130 00 DJ21 0001 0000 0001 5400 0100 186 DK50 0040 0440 1162 43 DO28 BAGR 0000 0001 2124 5361 1324 EE38 2200 2210 2014 5685 EG380019000500000000263180002 ES91 2100 0418 4502 0005 1332 FI21 1234 5600 0007 85 FK88 SC12 3456 7890 12 FO62 6460 0001 6316 34 FR14 2004 1010 0505 0001 3M02 606 GB29 NWBK 6016 1331 9268 19 GE29 NB00 0000 0101 9049 17 GI75 NWBK 0000 0000 7099 453 GL89 6471 0001 0002 06 GR16 0110 1250 0000 0001 2300 695 GT82 TRAJ 0102 0000 0012 1002 9690 HR12 1001 0051 8630 0016 0 HU42 1177 3016 1111 1018 0000 0000 IE29 AIBK 9311 5212 3456 78 IL62 0108 0000 0009 9999 999 IQ98 NBIQ 8501 2345 6789 012 IS14 0159 2600 7654 5510 7303 39 IT60 X054 2811 1010 0000 0123 456 JO94 CBJO 0010 0000 0000 0131 0003 02 KW81 CBKU 0000 0000 0000 1234 5601 01 KZ86 125K ZT50 0410 0100 LB62 0999 0000 0001 0019 0122 9114 LC55 HEMM 0001 0001 0012 0012 0002 3015 LI21 0881 0000 2324 013A A LT12 1000 0111 0100 1000 LU28 0019 4006 4475 0000 LV80 BANK 0000 4351 9500 1 LY83 002 048 000020100120361 MC58 1122 2000 0101 2345 6789 030 MD24 AG00 0225 1000 1310 4168 ME25 5050 0001 2345 6789 51 MK07 2501 2000 0058 984 MN12 1234 1234 5678 9123 MR13 0002 0001 0100 0012 3456 753 MT84 MALT 0110 0001 2345 MTLC AST0 01S MU17 BOMM 0101 1010 3030 0200 000M UR NI04 BAPR 0000 0013 0000 0355 8124 NL91 ABNA 0417 1643 00 NO93 8601 1117 947 OM81 0180 0000 0129 9123 456 PL61 1090 1014 0000 0712 1981 2874 PS92 PALS 0000 0000 0400 1234 5670 2 PT50 0002 0123 1234 5678 9015 4 QA58 DOHB 0000 1234 5678 90AB CDEF G RO49 AAAA 1B31 0075 9384 0000 RS35 2600 0560 1001 6113 79 RU17 0445 2522 5408 1781 0538 0913 1041 9 SA03 8000 0000 6080 1016 7519 SC18 SSCB 1101 0000 0000 0000 1497 USD SD21 2901 0501 2340 01 SE45 5000 0000 0583 9825 7466 SI56 2633 0001 2039 086 SK31 1200 0000 1987 4263 7541 SM86 U032 2509 8000 0000 0270 100 SO21 1000 0010 0100 0100 141 ST68 0002 0001 0192 1942 1011 2 SV 62 CENR 00000000000000700025 TL38 0080 0123 4567 8910 157 TN59 1000 6035 1835 9847 8831 TR33 0006 1005 1978 6457 8413 26 UA21 3223 1300 0002 6007 2335 6600 1 VA59 001 1230 0001 2345 678 VG96 VPVG 0000 0123 4567 8901 XK05 1212 0123 4567 8906 YE15 CBYE 0001 0188 6123 4567 8912 34 +Contact details +Organisation Associacio de Bancs Andorrans (ABA) Central Bank of the United Arab Emirates Bank of Albania Stuzza Central Bank of the Republic of Azerbaijan Centralna banka Bosne I Hercegovine Febelfin Bulgarian National Bank Central Bank of Bahrain Banque de la Republique du Burundi Banco Central do Brasil National Bank of the Republic of Belarus SIX Interbank Clearing Ltd Banco Central de Costa Rica Central Bank of Cyprus Czech National Bank Bundesverband deutscher Banken Banque Centrale de Djibouti Finance Denmark Central Bank of the Dominican Republic Estonian Banking Association Central Bank of Egypt Asociacion Espanola de Banca Privada (AEB) Federation of Finnish Financial Services Falkland Islands Government Finance Denmark CFONB Payments UK Management Ltd National Bank of Georgia Financial Services Commission Finance Denmark Hellenic Bank Association Banco de Guatemala Croatian National Bank Hungarian Banking Association Banking & Payments Federation Ireland Bank of Israel Central Bank of Iraq Icelandic Banks Data Centre Associazione Bancaria Italiana Central Bank of Jordan Central Bank of Kuwait National Bank of the Republic of Kazakhstan BANQUE DU LIBAN Saint Lucia Bureau of Standards Liechtenstein Bankers Association Bank of Lithuania ABBL - Association des Banques et Banquiers Luxembourg Bank of Latvia Central Bank of Libya Principaute de Monaco National Bank of Moldova Association of Montenegrin Banks National Bank of the Republic of Macedonia Bank of Mongolia (The Central Bank) Banque Centrale de Mauritanie Malta Bankers� Association The Central of Bank of Mauritius Banco Central de Nicaragua Betaalvereniging Nederland DnB NOR Bank Central Bank of Oman Narodowy Bank Polski Palestine Monetary Authority SIBS Forward Payment Solutions Qatar Central Bank National Bank of Romania National bank of Serbia The Central Bank of the Russian Federation "SAMA, Head Office" Central Bank of Seychelles Central Bank of Sudan (CBOS) Swedish Bankers� Association Bank of Slovenia National Bank of Slovakia Banca Centrale della Repubblica di San Mari Central Bank of Somalia Banco Central de Sao Tome e Principe Banco Central de Reserva de El Salvador Banco Central de Timor-Leste Tunisia�s Professional Association for Banks & Financial Institutions Central Bank of the Republic of Turkey Association UkrSWIFT Financial Information Authority (Autorita di Informazione Finanziaria - AIF) VP Bank House Central Bank of the Republic of Kosovo Central Bank of Yemen +Department Payment systems Head Office Payment Systems Division Payments & Operations Payment Systems and Minimum Reserves Directorate Banking Services Directorate DEBAN - Departamento de Operacoes Bancarias e de Sistema de Pagamentos Payment system and digital technologies directorate Zentrale Koordinationsstelle fuer IBAN/IPI - Technical Support Sistema de Pagos Payment systems and Accounting Services Cash and payment systems department Payment Systems Operations Sector The Treasury International Standards and Services Payment Systems Payment Systems Accounting and Payment System Payment Operations Area Payment and Settlement Systems SWIFT Department Head of Payment Systems and Services Financial Information Tech logy and Banking Operations Sector Payment Systems Payment Systems Operations and Payments Department Payment Systems Payment and Settlement Department Payments System The Secretary General �www.betaalvereniging.nl/a_NL_IBAN_exception Payment Systems Deparment Payment Systems Banking Payments and Settlement System General Department of Payment Systems Payment and Settlement Systems Payments System Departamento de Pagos y Valores Payment Systems Executive Board Office for Supervision and Regulation Payment Systems Payment Systems Depatment +Street Address "C/ Ciutat de Consuegra, 16 +Edifici l�Illa, esc. A, 2n pis" "Bainuna Street, Al Bateen" "Kompleksi Halili +Rruga e Dibres" Frankgasse 10/8 "32, R. Behbudov" Marsala Tita 25 Aarlenstraat 82 "1, Knyaz Alexander ? Sq." "King Faisal Highway, Block 317, Road 1702, Building 96" "1, Avenue du Gouvernement +PO BOX 705" SBS Quadra 3 Bloco B "Nezavisimosty Avenue, 20" Hardturmstrasse 201 Avenida Central y 1a. Calles 2 y 4 80 Kennedy Avenue Na Prikope 28 Burgstrasse 28 "Avenue Cheick Osman +P.O Box 705" 7 Amaliegade Av. Pedro Henriquez Urena esq. Leopoldo Navarro Ahtri 12 54 El Gomherya street "C/ Velazquez, 64 � 66" PO Box 1009 Thatcher Drive 7 Amaliegade 18 rue la Fayette 14 Finsbury Square "1, Zviad Gamsakhurdia Embankment" PO Box 940 7 Amaliegade Amerikis 21A 7 Avenue 22-01 Zone 1 Trg hrvatskih velikana 3 Jozsef nador ter 5-6. Floor 3 One Molesworth Street "Kaplan Street, Kyriat Ben Gurion" Rasheed Street Katrinartun 2 "Via delle Botteghe Oscure, 46" King Hussein Street P.O. Box 526 Safat "21, Koktem-3" Bisee Industrial Estate P.O. Box 254 Gedimi pr. 6 Boite Postale 13 K. Valdemara 2a Alfatah Road "7, rue du Gabian" 1 Grigore Vieru Avenue vaka Miloseva bb K.J.Pitu 1 Baga toiruu-3 Avenue de l�Ind�pendance 48/2 Birkirkara Road Sir William Newton Street "Paso a Desnivel Nejapa, 100 metros al este, Pista Juan Pablo II" P.O Box 83073 p.o.box 7100 "Head Office, Al Markazi, Building Number:44 +P.O. Box 1161" Swietokrzyska 11/21 "Al-Ramouni +Nablus Street" "Rua Soeiro Pereira Gomes, Lote 1" Abdulla Bin Jassim Street "Lipscani St.,25th" Nemanjina 17 "Neglinnaya Street, 12" P.O. BOX 2992 Independence Avenue HQ Building of Central Bank of SudanAljammah St. Slovenska 35 Imricha Karvasa 1 "Via del Voltone, 120" "Corso Somalia, 55 +P.O Box 11" Praca Da Independencia 13 1a Calle Poniente y 7Av. Nte. N 418 Avenida Bispo Medeiros "Anafartalar Mah. ?stiklal Cad. :10 +Ulus Alt?nda? " "21A, Observatoma Str." yes 156 Mainstreet Garibaldi 33 Crater Aledaroos Street 452 +City / Postcode "AD500 Andorra la Vella +Principat d�Andorra" Abu Dhabi PO Box 854 1000 Tirana A-1090 Wien AZ 1014 Baku "71000 Sarajevo, Bosnia and Herzegovina" 1040 Brussels "1000 Sofia, Bulgaria" Manama Bujumbura 71.070-900 Bras�lia 220008 Minsk CH-8021 ZURICH 10058-1000 San Jos� "P.O. Box 25529 +CY-1395 Nicosia" Praha 1 10178 BERLIN Djibouti DK 1256 Copenhagen K Santo Domingo 10151 Tallinn Cairo 28001 Madrid FIN-00101 Helsinki FIQQ 1ZZ Stanley DK 1256 Copenhagen K 75009 Paris London EC2A 1LQ 0114 Tbilisi "Suite 3, Ground Floor, Atlantic Suites" DK 1256 Copenhagen K 10672 Athens 01001 Guatemala Zagreb / 10002 H-1051 Budapest Dublin 2 D02 RF29 91007 Jerusalem Baghdad 105 Reykjavik 00186 Rome � Italy 11118 Amman � Capital 13006 Safat 050040 Almaty 11-5544 BEIRUT "Castries, PO Box CP 5412" FL-9490 Vaduz "Vilnius, LT-01103" L-2010 Luxembourg "Riga, LV-1050" 1103 Tripoli MC98000 MD-2005 Chisinau 81000 Podgorica 1000 Skopje 15160 Ulaanbaatar BP 623 uakchott Attard ATD1210 Port Louis 2252 - 2253 Managua 1080 AB Amsterdam 5020 Bergen 112 Ruwi - Commercial Business District - Muscat 00 � 919 Warsaw 452 AL-BIREH 1649-031 Lisboa 1234 Doha "Sector 3, Bucharest 030031" 11000 Belgrade Moscow Riyadh 11169 Victoria - Mahe Khartoum 11111/313 SE - 103 94 Stockholm SI-1505 Ljubljana 813 25 Bratislava 1 San Mari 47890 Mogadishu CP 13 Sao Tome San Salvador Dili Ankara / 06050 04053 Kiev N/A 00120 "VG1110 Road Town +Tortola" Prishtina / 10000 Aden +Department (generic) Email aba@aba.ad office@stuzza.at payment_systems@cbar.az info@febelfin.be rtgs@bnbank.org brb@brb.bi iban@bcb.gov.br iban@six-group.com PaymentSystems@centralbank.gov.cy iban.info@cnb.cz iban@bdb.de bndj@intnet.dj IBAN@FIDA.dk sistema.pagos@bancentral.gov.do pangaliit@pangaliit.ee Operations.development@cbe.org.eg asesoria.pagos@aebanca.es paymentsupport@finanssiala.fi treasury@sec.gov.fk IBAN@FIDA.dk cfonb@cfonb.fr RTGS@nbg.gov.ge info@fsc.gi IBAN@FIDA.dk hba@hba.gr contabilidad@banguat.gob.gt zpp@hnb.hr hba@hba.org.hu info@bpfi.ie zahav@boi.org.il cbi@cbi.iq hjalp@rb.is finance@cbj.gov.jo bito@cbk.gov.kw IBAN@bdl.gov.lb slbs@candw.lc; info@slbs.org tarpbank@lb.lt info@cbl.gov.ly amaf@amaf.mc udruzenjebanaka@t-com.me info@bcm.mr info@maltabankers.org sepa@betaalvereniging.nl - info@betaalvereniging.nl cso@cbo.gov.om sekretariat.dsp@nbp.pl psdsupport@pma.ps webmaster@sibs.pt platni.sistem@nbs.rs svc_dnps_ornps@cbr.ru gdps@sama.gov.sa Psd@cbs.sc; BankingServices@cbs.sc Pomoc.PS@bsi.si info@nbs.sk sistemi.pagamento@bcsm.sm info@centralbank.gov.so maria.delgado@bcr.gov.sv info@apbt.org.tn paymentsystems@tcmb.gov.tr ukrswift@ukrswift.org uvr@aif.va payment.systems@bqk-kos.org +Department Tel 376 80 71 10 + 43 15053280 / 0 + 994 124931122 + 32 25076811 + 359 29145761 + 55 (61)34142666 / + 55 (51)32157339 + 41 583994420 + 49 3016632301 + 1 8092219111 (ext. 3409) + 372 6116569 + 20 16777 (ext. 3109) + 34 917891311 + 33 148005042 + 995 322406555 +350 20040283 + 30 2103386500 "(502) 2429-6000 EXT. 4300 +(502) 2253-5352 " + 385 14564992 + 36 13276030 + 972 26552020 + 964 47903737479 + 354 5698877 +961-1-343317 + 370 52680604 +218 912137654 + 381 81232028 976-11-327510 + 222 45255206 + 356 21412210 / + 356 21410572 + 31 203051900 48 22 185 27 25 + 351 217813000 + 966 114662015 +389 1 4719 568 + 378 882325 503 2281 8831 + 216 71904423 + 90 3125077901 / 02 +39 06 69871522 "+ 381 (0)38222055 (ext. 209, 210 and 211)" +Primary Contact No Yes Yes No +Name Al Fandi Miho Muus Vahid Kresic Al-Fadhel Pelih Quintero Piki Fencl Riisalu Adel Claveria Clunie Whittle Natalia Rashti Bjornsson Camporeale Sayeh Al-Ghaith Imangazina Nahfawi Tzarmallah Zimmermann Borsa Zalmane ?u?u Radonjic "Spasovski, M.Sc.Econ" Googoolye Fjereide Al Rawahi ?ysakowski Awwad Abdoulhadi Avram Dragana Aboshock Rutberg Quaresma Alberto Hernandez Lobo Brites Di Ruzza Reichenstein Alsobaihi +First Name Rashid Mohamed Valer Hendrik Gurbanli Srdan Mohammed A. Nataly Nidia Christia Ivan Enn Shereef Pilar Pat James Tchkoidze Yael Thor Rita Rami Anwar Alina Ghina Haynes Gert Jean-Pierre Anda Victor Mirko Aco Yandraduth Atle Abdullah Pawe? Riyad Ahen Ruxandra Stanic Ahmed Mohamed Ahmed Lars Venancio Juan Sara Tommaso Peter Kamal +Title Executive Director - Banking Operations Deputy Director Dipl.Ing. Deputy of Director - Payment systems and settlements Head- Payment and Settlement Deputy head of directorate Payment System Officer Head of Project Management � Operations Sector Head of Finance Director International Standards and Services� Mrs. Head of the Clearinghouse Operations Unit Head of Electronic Paying Communication Div Executive Director Expert Head of RTGS & SWIFT Unit Head of Department � Standards Development Rechtskonsulent Director of Payments System Department Secretary General Secretary "Director Accounting, Budgeting and Payment" Associate Payment System Specialist Head of Division Director Acting Director of Banking Payments and Settlement Project Manager Computer Engineer - Communication and Systems Security Section Gerente de Operacio Deputy Governor - Payments and Banking "Director, Financial Information Authority" Managing Director General Manager of Payment Systems +Email rashed.alfandi@cbuae.gov.ae vmiho@bankofalbania.org hendrik.muus@stuzza.at vahid_gurbanli@cbar.az srdjan.kresic@cbbh.ba malfadhel@cbb.gov.bh N.Pelih@nbrb.by quinteromn@bccr.fi.cr Shereef.Adel@Cbe.org.eg pclaveria@aebanca.es pclunie@sec.gov.fk James.Whittle@paymentsuk.org.uk Natalia.Tchkoidze@nbg.gov.ge yael.rashti@boi.org.il thor@rb.is r.camporeale@abi.it rami.sayeh@cbj.gov.jo aalghaith@cbk.gov.kw imangazina@nationalbank.kz gnahfawi@bdl.gov.lb t.haynes@slbs.org gert.zimmermann@bankenverband.li borsa@abbl.lu Anda.Zalmane@bank.lv Victor.Susu@bnm.md aco@ic.mchamber.org.mk ygoogool@bom.intnet.mu atle.fjereide@dnbnor.no Abdullah.alwarahi@cbo.gov.om pawel.lysakowski@nbp.pl rawwad@pma.ps ahena@qcb.gov.qa ruxandra.avram@bnro.ro platni.sistem@nbs.rs ahmed.elhassan@cbos.gov.sd lars.rutberg@bankforeningen.se a_q_venancio@bcstp.st juan.hernandez@bcr.gob.sv sara.brites@bancocentral.tl aif@aif.va ; diruzza@aif.va peter.reichenstein@vpbank.com kamal.abdulraqeb@cby-ye.com +Tel + 971 26915424 / 8486 + 355 42419301 / 2 / 3 (ext. 3061) + 43 15053280 / 73 + 994 124931122 (ext.480) + 387 33286485 + 973 17547758 +375 17 215 44 93 + 506 22433648 + 357 22714405 + 420 224413580 + 20 1224011007 + 34 917891311 +500 28400 +44 (0) 20 3217 8209 +995 322446444 + 972 26552914 + 354 5698877 + 39 066767332 +96264630301 + 965 22451568 + 7 7272704720 +961-1-750000 Ext: 5606-5659 + 1 7584530049 + 423 2301396 + 352 4636601 + 371 67022510 + 373 22822610 + 389 23237425 + 230 2023842 + 47 91895624 +968 24149173 48 22 185 14 48 + 970 224415250 + 974 44456371 + 40 213070198 +381 113338050 +24 9187055588 / +24 9912207225 + 46 84534450 + 239 2243700 503 2281 8801 + 670 3313718 +39 06 698 84423 + 1 2844941100 00967 773371155 +Secondary Contact No Yes No +Name Al Dhaheri Khayaladdin Sasa Ndayiziga Zuiko Carvajal Moussa Yacin Abdelrazek Prior Rusudan Snorrason Alrashdan Alkheshnam Zouheiry Mkabi ?urcan-Munteanu Al Siyabi Battara Hindi Myznikov Mahgoub De Sousa de los Angeles de Alvarado Aini Djafar Alkatiri Rajeh +First Name Khalifa Salem Tagiyev Lemez Bernard Viachaslau Francisco Hassan Dalia Tracey Kakulia Fridrik Thor Nibal Esam Bassel Walcott Natalia Mohamed Ewelina Fares Mikhail Mohamed Ismail Luis Maria Nur Mansour +Title Executive Director IT Senior specialist - Payment systems and settlements "Advisor of the Board, in charge of inforamtion System and communication" Deputy head of payment systems organization and development department Director Directeur Executif de la Banque Centrale de Djibouti Head of Organization and Re-engineering Financial Secretary Mrs. CEO Senior Officer ITSPD Manager Head of Operations Director � Executive Office "Head of Regulation, licensing and supervision of payment services providers and electronic money issuers Direction" Payment System Specialist Senior Specialist Deputy Director Advisor Economical Head section Consultant - PMOG Jefe del Departamento de Pagos y Valores Deputy Governor � Financial Supervision Deputy Governor of Banking Sector +Email khalifa.aldhaheri@cbuae.gov.ae khayaladdin_tagiyev@cbar.az sasa.lemez@cbbh.ba bndayiziga@brb.bi v.zuiko@nbrb.by carvajalcf@bccr.fi.cr hassan.moussa@banque-centrale.dj Dalia.Abdelrazek@cbe.org.eg tprior@sec.gov.fk Rusudan.Kakulia@nbg.gov.ge Fridrik.Thor.Snorrason@rb.is nibal.alrashdan@cbj.gov.jo ealkheshnam@cbk.gov.kw belzouheiry@bdl.gov.lb director@slbs.org Natalia.Turcan-Munteanu@bnm.md Mohamed.alsiyabi@cbo.gov.om ewelina.battara@zbp.pl fhindi@pma.ps mmv4@cbr.ru mohamed.mahgoub@cbos.gov.sd lufermoso@bcstp.st maria.delgado@bcr.gov.sv nur.alkatiri@bancocentral.tl mansour.rajeh@cby-ye.com +Tel + 971 26915202 + 994 124931122 (ext.332) + 387 33286465 00257 22041019 +375 17 215 44 46 + 506 22433655 +25321312006 + 20 1001682269 +500 28400 +995 322446365 + 354 5698877 +96264630301 + 965 22972938 +961-1-750000 Ext: 5609-5656 + 1 7584560546 + 373 22822265 +968 24149086 +48603209449 + 970 22415250 +7 495 771 43 92 + 24 9187055157 / +24 9912951582 + 239 2243700 503 2281 8830 + 670 3313318 +Updates +Last update date Mar-21 Feb-15 Apr-11 Aug-16 Aug-16 Aug-16 Sep-16 Aug-16 Jan-12 Oct-21 Aug-16 Feb-24 Aug-16 Jan-19 Aug-09 Dec-16 Jan-11 May-22 Nov-18 Sep-16 Aug-16 Jan-20 Sep-16 Aug-16 Jul-23 Feb-17 Sep-16 May-17 Apr-23 Sep-16 Nov-18 Aug-16 Oct-16 Aug-16 Sep-16 Aug-16 Sep-16 Nov-16 Aug-16 Mar-13 Sep-16 Aug-16 Mar-16 Jan-10 Sep-16 Apr-12 Aug-16 Aug-16 Jan-09 Sep-20 Sep-16 Sep-16 May-10 Jan-11 Apr-23 Sep-16 Aug-16 Apr-07 Apr-23 Sep-20 Aug-09 Feb-24 Oct-16 Aug-16 Jul-24 Jan-14 Apr-07 Mar-17 May-22 Sep-16 Oct-19 Oct-21 Aug-09 Sep-16 Aug-16 Aug-16 Feb-23 Sep-16 Mar-21 Nov-14 May-16 Sep-16 Sep-16 Dec-18 Jun-14 Sep-16 Jul-24