Browse Source

Une nouvelle vérification pour les numéros IBAN. On intègre telle quelle une lib existante car ça fait juste 160ko, on va pas nécessiter un plugin pour ça. Cette vérif sait normaliser aussi (pas de séparateur, majuscules)

v1
RastaPopoulos 1 year ago
parent
commit
d9701c656d
  1. 5
      lang/verifier_fr.php
  2. 223
      lib/php-iban/oophp-iban.php
  3. 1316
      lib/php-iban/php-iban.php
  4. 117
      lib/php-iban/registry.txt
  5. 24
      lib/php-iban/utils/bis-banks
  6. 319
      lib/php-iban/utils/convert-registry.php
  7. 15
      lib/php-iban/utils/dump.php
  8. 10
      lib/php-iban/utils/example-ibans/ae-ibans
  9. 78
      lib/php-iban/utils/example-ibans/al-ibans
  10. 39
      lib/php-iban/utils/example-ibans/ao-ibans
  11. 25
      lib/php-iban/utils/example-ibans/at-ibans
  12. 4
      lib/php-iban/utils/example-ibans/az-ibans
  13. 57
      lib/php-iban/utils/example-ibans/ba-ibans
  14. 12
      lib/php-iban/utils/example-ibans/be-ibans
  15. 13
      lib/php-iban/utils/example-ibans/bg-ibans
  16. 3
      lib/php-iban/utils/example-ibans/bh-ibans
  17. 37
      lib/php-iban/utils/example-ibans/by-ibans
  18. 3
      lib/php-iban/utils/example-ibans/cf-ibans
  19. 4
      lib/php-iban/utils/example-ibans/cg-ibans
  20. 15
      lib/php-iban/utils/example-ibans/ch-ibans
  21. 16
      lib/php-iban/utils/example-ibans/cr-ibans
  22. 9
      lib/php-iban/utils/example-ibans/cz-ibans
  23. 21
      lib/php-iban/utils/example-ibans/de-ibans
  24. 2
      lib/php-iban/utils/example-ibans/dj-ibans
  25. 13
      lib/php-iban/utils/example-ibans/dk-ibans
  26. 26
      lib/php-iban/utils/example-ibans/ee-ibans
  27. 1
      lib/php-iban/utils/example-ibans/eg-ibans
  28. 37
      lib/php-iban/utils/example-ibans/es-ibans
  29. 22
      lib/php-iban/utils/example-ibans/fi-ibans
  30. 89
      lib/php-iban/utils/example-ibans/fr-ibans
  31. 3
      lib/php-iban/utils/example-ibans/ga-ibans
  32. 31
      lib/php-iban/utils/example-ibans/gb-ibans
  33. 1
      lib/php-iban/utils/example-ibans/gq-ibans
  34. 2
      lib/php-iban/utils/example-ibans/gr-ibans
  35. 1
      lib/php-iban/utils/example-ibans/gw-ibans
  36. 1
      lib/php-iban/utils/example-ibans/hn-ibans
  37. 9
      lib/php-iban/utils/example-ibans/hr-ibans
  38. 6
      lib/php-iban/utils/example-ibans/hu-ibans
  39. 1
      lib/php-iban/utils/example-ibans/ie-ibans
  40. 1
      lib/php-iban/utils/example-ibans/iq-ibans
  41. 12
      lib/php-iban/utils/example-ibans/ir-ibans
  42. 6
      lib/php-iban/utils/example-ibans/it-ibans
  43. 1
      lib/php-iban/utils/example-ibans/km-ibans
  44. 14
      lib/php-iban/utils/example-ibans/lt-ibans
  45. 11
      lib/php-iban/utils/example-ibans/lu-ibans
  46. 7
      lib/php-iban/utils/example-ibans/lv-ibans
  47. 1
      lib/php-iban/utils/example-ibans/ma-ibans
  48. 13
      lib/php-iban/utils/example-ibans/mc-ibans
  49. 5
      lib/php-iban/utils/example-ibans/me-ibans
  50. 45
      lib/php-iban/utils/example-ibans/mk-ibans
  51. 1
      lib/php-iban/utils/example-ibans/mr-ibans
  52. 1
      lib/php-iban/utils/example-ibans/ne-ibans
  53. 1
      lib/php-iban/utils/example-ibans/ni-ibans
  54. 26
      lib/php-iban/utils/example-ibans/nl-ibans
  55. 44
      lib/php-iban/utils/example-ibans/no-ibans
  56. 33
      lib/php-iban/utils/example-ibans/pk-ibans
  57. 122
      lib/php-iban/utils/example-ibans/pl-ibans
  58. 37
      lib/php-iban/utils/example-ibans/pt-ibans
  59. 2
      lib/php-iban/utils/example-ibans/ro-ibans
  60. 57
      lib/php-iban/utils/example-ibans/rs-ibans
  61. 4
      lib/php-iban/utils/example-ibans/sa-ibans
  62. 5
      lib/php-iban/utils/example-ibans/se-ibans
  63. 88
      lib/php-iban/utils/example-ibans/si-ibans
  64. 11
      lib/php-iban/utils/example-ibans/sk-ibans
  65. 28
      lib/php-iban/utils/example-ibans/sm-ibans
  66. 1
      lib/php-iban/utils/example-ibans/sv-ibans
  67. 2
      lib/php-iban/utils/example-ibans/td-ibans
  68. 1
      lib/php-iban/utils/example-ibans/tg-ibans
  69. 2
      lib/php-iban/utils/example-ibans/tl-ibans
  70. 43
      lib/php-iban/utils/example-ibans/tn-ibans
  71. 13
      lib/php-iban/utils/explode-iban
  72. 37
      lib/php-iban/utils/generate-supported-countries-list
  73. 10
      lib/php-iban/utils/obfuscation-test.php
  74. 193
      lib/php-iban/utils/ootest.php
  75. 175
      lib/php-iban/utils/other-tests.php
  76. 191
      lib/php-iban/utils/test.php
  77. 92
      lib/php-iban/utils/validate-list.php
  78. 2
      paquet.xml
  79. 49
      verifier/iban.php
  80. 13
      verifier/iban.yaml

5
lang/verifier_fr.php

@ -35,6 +35,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'erreur_entier_min' => 'La valeur doit être supérieure ou égale à @min@.',
'erreur_heure' => 'L’horaire indiqué n’existe pas.',
'erreur_heure_format' => 'Le format de l’heure n’est pas accepté.',
'erreur_iban_format' => 'Vous devez fournir un IBAN valide.',
'erreur_id_document' => 'Cet identifiant de document n’est pas valide.',
'erreur_id_objet' => 'Cet identifiant n’est pas valide.',
'erreur_inconnue_generique' => 'Le format n’est pas correct.',
@ -76,6 +77,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'normaliser_option_date_aucune' => 'Non',
'normaliser_option_date_en_date' => 'Au format « Date » (pour SQL)',
'normaliser_option_date_en_datetime' => 'Au format « Datetime » (pour SQL)',
'normaliser_option_iban' => 'Normaliser l’IBAN ?',
'normaliser_option_iban_non' => 'Non',
'normaliser_option_iban_machine' => 'Au format standard (sans espaces, majuscules)',
// O
'option_code_postal_pays_explication' => 'Code à 2 chiffres d’un pays : FR, DZ, DE, etc.',
@ -175,6 +179,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'type_entier_description' => 'Vérifie que la valeur est un entier, avec la possibilité de restreindre entre deux valeurs.',
'type_fichiers' => 'Propriétés de fichier',
'type_fichiers_description' => 'Pour chaque fichier chargé, vérifier certaines propriétés',
'type_iban' => 'IBAN',
'type_id_document' => 'Numéro d’un document',
'type_id_document_description' => 'Vérifie que la valeur correspond à un numéro de document existant.',
'type_id_objet' => 'Numéro d’un objet',

223
lib/php-iban/oophp-iban.php

@ -0,0 +1,223 @@
<?php
namespace PHP_IBAN;
# OO wrapper for 'php-iban.php'
Class IBAN {
function __construct($iban = '') {
require_once('php-iban.php'); # load the procedural codebase
$this->iban = $iban;
}
public function Verify($iban='',$machine_format_only=false) {
if($iban!='') { return verify_iban($iban,$machine_format_only); }
return verify_iban($this->iban,$machine_format_only);
# we could throw exceptions of various types, but why - does it really
# add anything? possibly some slightly better user feedback potential.
# however, this can be written by hand by performing individual checks
# ala the code in verify_iban() itself where required, which is likely
# almost never. for the increased complexity and
# maintenance/documentation cost, i say, therefore: no. no exceptions.
}
public function VerifyMachineFormatOnly($iban='') {
if($iban!='') { return verify_iban($iban,true); }
return verify_iban($this->iban,true);
}
public function MistranscriptionSuggestions() {
return iban_mistranscription_suggestions($this->iban);
}
public function MachineFormat() {
return iban_to_machine_format($this->iban);
}
public function HumanFormat() {
return iban_to_human_format($this->iban);
}
public function ObfuscatedFormat() {
return iban_to_obfuscated_format($this->iban);
}
public function Country($iban='') {
return iban_get_country_part($this->iban);
}
public function Checksum($iban='') {
return iban_get_checksum_part($this->iban);
}
public function NationalChecksum($iban='') {
return iban_get_nationalchecksum_part($this->iban);
}
public function BBAN() {
return iban_get_bban_part($this->iban);
}
public function VerifyChecksum() {
return iban_verify_checksum($this->iban);
}
public function FindChecksum() {
return iban_find_checksum($this->iban);
}
public function SetChecksum() {
$this->iban = iban_set_checksum($this->iban);
}
public function ChecksumStringReplace() {
return iban_checksum_string_replace($this->iban);
}
public function FindNationalChecksum() {
return iban_find_nationalchecksum($this->iban);
}
public function SetNationalChecksum() {
$this->iban = iban_set_nationalchecksum($this->iban);
}
public function VerifyNationalChecksum() {
return iban_verify_nationalchecksum($this->iban);
}
public function Parts() {
return iban_get_parts($this->iban);
}
public function Bank() {
return iban_get_bank_part($this->iban);
}
public function Branch() {
return iban_get_branch_part($this->iban);
}
public function Account() {
return iban_get_account_part($this->iban);
}
public function Countries() {
return iban_countries();
}
}
# IBANCountry
Class IBANCountry {
# constructor with code
function __construct($code = '') {
$this->code = $code;
}
public function Code() {
return $this->code;
}
public function Name() {
return iban_country_get_country_name($this->code);
}
public function DomesticExample() {
return iban_country_get_domestic_example($this->code);
}
public function BBANExample() {
return iban_country_get_bban_example($this->code);
}
public function BBANFormatSWIFT() {
return iban_country_get_bban_format_swift($this->code);
}
public function BBANFormatRegex() {
return iban_country_get_bban_format_regex($this->code);
}
public function BBANLength() {
return iban_country_get_bban_length($this->code);
}
public function IBANExample() {
return iban_country_get_iban_example($this->code);
}
public function IBANFormatSWIFT() {
return iban_country_get_iban_format_swift($this->code);
}
public function IBANFormatRegex() {
return iban_country_get_iban_format_regex($this->code);
}
public function IBANLength() {
return iban_country_get_iban_length($this->code);
}
public function BankIDStartOffset() {
return iban_country_get_bankid_start_offset($this->code);
}
public function BankIDStopOffset() {
return iban_country_get_bankid_stop_offset($this->code);
}
public function BranchIDStartOffset() {
return iban_country_get_branchid_start_offset($this->code);
}
public function BranchIDStopOffset() {
return iban_country_get_branchid_stop_offset($this->code);
}
public function NationalChecksumStartOffset() {
return iban_country_get_nationalchecksum_start_offset($this->code);
}
public function NationalChecksumStopOffset() {
return iban_country_get_nationalchecksum_stop_offset($this->code);
}
public function RegistryEdition() {
return iban_country_get_registry_edition($this->code);
}
public function SWIFTOfficial() {
return iban_country_get_country_swift_official($this->code);
}
public function IsSEPA() {
return iban_country_is_sepa($this->code);
}
public function IANA() {
return iban_country_get_iana($this->code);
}
public function ISO3166() {
return iban_country_get_iso3166($this->code);
}
public function ParentRegistrar() {
return iban_country_get_parent_registrar($this->code);
}
public function CurrencyISO4217() {
return iban_country_get_currency_iso4217($this->code);
}
public function CentralBankURL() {
return iban_country_get_central_bank_url($this->code);
}
public function CentralBankName() {
return iban_country_get_central_bank_name($this->code);
}
}
?>

1316
lib/php-iban/php-iban.php

File diff suppressed because it is too large Load Diff

117
lib/php-iban/registry.txt

@ -0,0 +1,117 @@
country_code|country_name|domestic_example|bban_example|bban_format_swift|bban_format_regex|bban_length|iban_example|iban_format_swift|iban_format_regex|iban_length|bban_bankid_start_offset|bban_bankid_stop_offset|bban_branchid_start_offset|bban_branchid_stop_offset|registry_edition|country_sepa|swift_official|bban_checksum_start_offset|bban_checksum_stop_offset|country_code_iana|country_code_iso3166_1_alpha2|parent_registrar|currency_iso4217|central_bank_url|central_bank_name
AL|Albania|0000000235698741|212110090000000235698741|8!n16!c|^(\d{8})([A-Za-z0-9]{16})$|24|AL47212110090000000235698741|AL2!n8!n16!c|^AL(\d{2})(\d{8})([A-Za-z0-9]{16})$|28|0|2|3|6|2011-06-20|0|1|7|7|al|AL||ALL|www.bankofalbania.org|Bank of Albania
DZ|Algeria|12341234123412341234|12341234123412341234|20!n|^[0-9]{20}$|20|DZ3512341234123412341234|DZ2!n20!n|^DZ(\d{2})(\d{20})$|24|||||2016-01-22|0|0|||dz|DZ||DZD|www.bank-of-algeria.dz|Bank of Algeria
AD|Andorra|2030200359100100|00012030200359100100|4!n4!n12!c|^(\d{4})(\d{4})([A-Za-z0-9]{12})$|20|AD1200012030200359100100|AD2!n4!n4!n12!c|^AD(\d{2})(\d{4})(\d{4})([A-Za-z0-9]{12})$|24|0|3|4|7|2011-06-20|1|1|||ad|AD||EUR|www.inaf.ad|Institut Nacional Andorrà de Finances
AO|Angola|123412341234123412341|123412341234123412341|21!n|^[0-9]{21}$|21|AO44123412341234123412341|AO2!n21!n|^AO(\d{2})(\d{21})$|25|||||2016-01-22|0|0|||ao|AO||AOA|www.bna.ao|National Bank of Angola
AT|Austria|19043-234573201|1904300234573201|5!n11!n|^(\d{5})(\d{11})$|16|AT611904300234573201|AT2!n5!n11!n|^AT(\d{2})(\d{5})(\d{11})$|20|0|4|||2011-06-20|1|1|||at|AT||EUR|www.oenb.at|Austrian National Bank
AZ|Azerbaijan|NABZ00000000137010001944|NABZ00000000137010001944|4!a20!c|^([A-Z]{4})([A-Za-z0-9]{20})$|24|AZ21NABZ00000000137010001944|AZ2!n4!a20!c|^AZ(\d{2})([A-Z]{4})([A-Za-z0-9]{20})$|28|0|3|||2012-05-29|0|1|||az|AZ||AZN|www.cbar.az|The Central Bank of the Republic of Azerbaijan
BH|Bahrain|00001299123456|BMAG00001299123456|4!a14!c|^([A-Z]{4})([A-Za-z0-9]{14})$|18|BH67BMAG00001299123456|BH2!n4!a14!c|^BH(\d{2})([A-Z]{4})([A-Za-z0-9]{14})$|22|0|3|||2012-05-29|0|1|||bh|BH||BHD|www.cbb.gov.bh|Central Bank of Bahrain
BE|Belgium|539-0075470-34|539007547034|3!n7!n2!n|^(\d{3})(\d{7})(\d{2})$|12|BE68539007547034|BE2!n3!n7!n2!n|^BE(\d{2})(\d{3})(\d{7})(\d{2})$|16|0|2|||2011-06-20|1|1|10|11|be|BE||EUR|www.nbb.be|National Bank of Belgium
BJ|Benin|A12312341234123412341234|A12312341234123412341234|1!a23!n|^[A-Z]{1}[0-9]{23}$|24|BJ83A12312341234123412341234|BJ2!n1!a23!n|^BJ(\d{2})([A-Z]{1}[0-9]{23})$|28|||||2016-01-22|0|0|||bj|BJ||XOF|www.bceao.int|Central Bank of West African States (BCEAO)
BA|Bosnia and Herzegovina|199-044-00012002-79|1990440001200279|3!n3!n8!n2!n|^(\d{3})(\d{3})(\d{8})(\d{2})$|16|BA391290079401028494|BA2!n3!n3!n8!n2!n|^BA(\d{2})(\d{3})(\d{3})(\d{8})(\d{2})$|20|0|2|3|5|2011-06-20|0|1|14|15|ba|BA||BAM|www.cbbh.ba|Central Bank of Bosnia and Herzegovina
BR|Brazil|0009795493C1|00360305000010009795493P1|8!n5!n10!n1!a1!c|^(\d{8})(\d{5})(\d{10})([A-Z]{1})([A-Za-z0-9]{1})$|25|BR9700360305000010009795493P1|BR2!n8!n5!n10!n1!a1!c|^BR(\d{2})(\d{8})(\d{5})(\d{10})([A-Z]{1})([A-Za-z0-9]{1})$|29|0|7|8|12|2013-06-20|0|1|||br|BR||BRL|www.bcb.gov.br|Central Bank of Brazil
VG|British Virgin Islands|00000 12 345 678 901|VPVG0000012345678901|4!a16!n|^([A-Z]{4})(\d{16})$|20|VG96VPVG0000012345678901|VG2!n4!a16!n|^VG(\d{2})([A-Z]{4})(\d{16})$|24|0|3|||2012-05-29|0|1|||vg|VG||USD|www.bvifsc.vg|The British Virgin Islands Financial Services Commission
BG|Bulgaria|BNBG 9661 1020 3456 78|BNBG96611020345678|4!a4!n2!n8!c|^([A-Z]{4})(\d{4})(\d{2})([A-Za-z0-9]{8})$|18|BG80BNBG96611020345678|BG2!n4!a4!n2!n8!c|^BG(\d{2})([A-Z]{4})(\d{4})(\d{2})([A-Za-z0-9]{8})$|22|0|3|4|7|2011-06-20|1|1|||bg|BG||BGN|www.bnb.bg|Bulgarian National Bank
BF|Burkina Faso|12341234123412341234123|12341234123412341234123|23!n|^[0-9]{23}$|23|BF4512341234123412341234123|BF2!n23!n|^BF(\d{2})(\d{23})$|27|||||2016-01-22|0|0|||bf|BF||XOF|www.bceao.int|Central Bank of West African States (BCEAO)
BI|Burundi|123412341234|123412341234|12!n|^[0-9]{12}$|12|BI33123412341234|BI2!n12!n|^BI(\d{2})(\d{12})$|16|||||2016-01-22|0|0|||bi|BI||BIF|www.brb.bi|Bank of the Republic of Burundi
BY|Belarus|3600 0000 0000 0Z00 AB00|NBRB 3600 0000 0000 0Z00 AB00|4!c4!n16!c|^([A-Za-z0-9]{4})(\d{4})([A-Za-z0-9]{16})$|24|BY13NBRB3600900000002Z00AB00|BY2!n4!c4!n16!c|^BY(\d{2})([A-Za-z0-9]{4})(\d{4})([A-Za-z0-9]{16})$|28|0|3|||2017-08-03|0|1|||by|BY||BYN|www.nbrb.by|National Bank of the Republic of Belarus
CM|Cameroon|12341234123412341234123|12341234123412341234123|23!n|^[0-9]{23}$|23|CM1512341234123412341234123|CM2!n23!n|^CM(\d{2})(\d{23})$|27|||||2016-01-22|0|0|||cm|CM||XAF|www.beac.int|Bank of Central African States
CV|Cape Verde|12341234123412341|12341234123412341|21!n|^[0-9]{21}$|21|CV05123412341234123412341|CV2!n21!n|^CV(\d{2})(\d{21})$|25|||||2016-01-22|0|0|||cv|CV||CVE|www.bcv.cv|Bank of Cape Verde
CF|Central African Republic|0140183240140|20001000010140183240140|5!n5!n11!n2!n|^(\d{5})(\d{5})(\d{11})(\d{2})$|23|CF4220001000010120069700160|CF2!n5!n5!n11!n2!n|^CF(\d{2})(\d{5})(\d{5})(\d{11})(\d{2})$|27|0|4|5|9|2017-08-03|0|0|21|23|cf|CF||XAF|www.beac.int|Bank of Central African States
TD|Chad|37102538601 74|60003000203710253860174|5!n5!n11!n2!n|^(\d{5})(\d{5})(\d{11})(\d{2})$|23|TD8960003000203710253860174|TD2!n5!n5!n11!n2!n|^TD(\d{2})(\d{5})(\d{5})(\d{11})(\d{2})$|27|0|4|5|9|2017-08-03|0|0|21|23|cf|CF||XAF|www.beac.int|Bank of Central African States
KM|Comoros|00109044001 37|00005000010010904400137|5!n5!n13!n2!n|^(\d{5})(\d{5})(\d{11})(\d{2})$|23|KM4600005000010010904400137|KM2!n5!n5!n13!n2!n|^KM(\d{2})(\d{5})(\d{5})(\d{11})(\d{2})$|27|0|4|5|9|2017-08-03|0|0|21|23|km|KM||LMF|www.banque-comores.km|Banque Centrale des Comores
CG|Congo|10134513000|30011000101013451300019|5!n5!n11!n2!n|^(\d{5})(\d{5})(\d{11})(\d{2})$|23|CG3930013020003710721836132|CG2!n5!n5!n11!n2!n|^CG(\d{2})(\d{5})(\d{5})(\d{11})(\d{2})$|27|0|4|5|9|2017-08-01|0|1|21|23|cg|CG||CDF|www.bcc.cd|Central Bank of the Congo
CR|Costa Rica|02001026284066|015202001026284066|4!n14!n|^(\d{4})(\d{14})$|18|CR05015202001026284066|CR2!n4!n14!n|^CR(\d{2})(\d{4})(\d{14})$|22|0|3|||2012-05-29|0|1|||cr|CR||CRC|www.bccr.fi.cr|Central Bank of Costa Rica
CI|Côte d'Ivoire|A12312341234123412341234|A12312341234123412341234|1!a23!n|^[A-Z]{1}[0-9]{23}$|24|CI77A12312341234123412341234|CI2!n1!a23!n|^CI(\d{2})([A-Z]{1})(\d{23})$|28|||||2016-01-22|0|0|||ci|CI||XOF|www.bceao.int|Central Bank of West African States (BCEAO)
HR|Croatia|1001005-1863000160|10010051863000160|7!n10!n|^(\d{7})(\d{10})$|17|HR1210010051863000160|HR2!n7!n10!n|^HR(\d{2})(\d{7})(\d{10})$|21|0|6|||2011-06-20|1|1|||hr|HR||HRK|www.hnb.hr|Croatian National Bank
CY|Cyprus|1200527600|002001280000001200527600|3!n5!n16!c|^(\d{3})(\d{5})([A-Za-z0-9]{16})$|24|CY17002001280000001200527600|CY2!n3!n5!n16!c|^CY(\d{2})(\d{3})(\d{5})([A-Za-z0-9]{16})$|28|0|2|3|7|2011-06-20|1|1|||cy|CY||EUR|www.centralbank.gov.cy|Central Bank of Cyprus
CZ|Czech Republic|19-2000145399/0800|08000000192000145399|4!n6!n10!n|^(\d{4})(\d{6})(\d{10})$|20|CZ6508000000192000145399|CZ2!n4!n6!n10!n|^CZ(\d{2})(\d{4})(\d{6})(\d{10})$|24|0|3|4|9|2011-06-20|1|1|||cz|CZ||CZK|www.cnb.cz|Czech National Bank
DK|Denmark|0040 0440116243, 6460 0001631634, 6471 0001000206|00400440116243, 64600001631634, 64710001000206|4!n9!n1!n|^(\d{4})(\d{9})(\d{1})$|14|DK5000400440116243|DK2!n4!n9!n1!n|^DK(\d{2})(\d{4})(\d{9})(\d{1})$|18|0|3|||2011-06-20|1|1|||dk|DK||DKK|www.nationalbanken.dk|National Bank of Denmark (Danmarks Nationalbank)
FO|Faroe Islands|0040 0440116243, 6460 0001631634, 6471 0001000206|00400440116243, 64600001631634, 64710001000206|4!n9!n1!n|^(\d{4})(\d{9})(\d{1})$|14|FO2000400440116243|FO2!n4!n9!n1!n|^FO(\d{2})(\d{4})(\d{9})(\d{1})$|18|0|3|||2011-06-20|0|1|13|13|fo|FO|DK|DKK|www.nationalbanken.dk|National Bank of Denmark (Danmarks Nationalbank)
GL|Greenland|0040 0440116243, 6460 0001631634, 6471 0001000206|00400440116243, 64600001631634, 64710001000206|4!n9!n1!n|^(\d{4})(\d{9})(\d{1})$|14|GL2000400440116243|GL2!n4!n9!n1!n|^GL(\d{2})(\d{4})(\d{9})(\d{1})$|18|0|3|||2011-06-20|0|1|||gl|GL|DK|DKK|www.nationalbanken.dk|National Bank of Denmark (Danmarks Nationalbank)
DJ|Djibouti|04099430200 08|10002010010409943020008|5!n5!n13!n2!n|^(\d{5})(\d{5})(\d{11})(\d{2})$|23|DJ2110002010010409943020008|DJ2!n5!n5!n13!n2!n|^DJ(\d{2})(\d{5})(\d{5})(\d{11})(\d{2})$|27|0|4|5|9|2017-08-03|0|0|21|23|dj|DJ||DJF|www.banque-centrale.dj|Central Bank of Djibouti
DO|Dominican Republic|1212453611324|AGR00000001212453611324|4!c20!n|^([A-Za-z0-9]{4})(\d{20})$|24|DO28BAGR00000001212453611324|DO2!n4!c20!n|^DO(\d{2})([A-Za-z0-9]{4})(\d{20})$|28|0|3|||2011-06-20|0|1|||do|DO||DOP|www.bancentral.gov.do|Central Bank of the Dominican Republic
EG|Egypt|000263180002|0019000500000000263180002|4!n4!n17!n|(\d{4})(\d{4})(\d{17})|25|EG380019000500000000263180002|EG2!n4!n4!n17!n|^EG(\d{2})(\d{4})(\d{4})(\d{17})$|29|0|4|5|9|2020-01-01|0|0|||eg|EG||EGP|www.cbe.org.eg|Central Bank of Egypt
SV|El Salvador|00000000000000700025|CENR00000000000000700025|4!a20!n|^([A-Za-z0-9]{4})(\d{20})$|24|SV62CENR00000000000000700025|SV2!n4!a20!n|^SV(\d{2})([A-Za-z0-9]{4})(\d{20})$|28|0|3|||2017-08-03|0|1|||sv|SV||USD|www.bcr.gob.sv|Central Reserve Bank of El Salvador
GQ|Equitorial Guinea|37152281901 96|50002001003715228190196|5!n5!n11!n2!n|^(\d{5})(\d{5})(\d{11})(\d{2})$|23|GQ7050002001003715228190196|GQ2!n5!n5!n11!n2!n|^GQ(\d{2})(\d{5})(\d{5})(\d{11})(\d{2})$|27|0|4|5|9|2017-08-03|0|0|21|23|gq|GQ||XAF|www.beac.int|Bank of Central African States
EE|Estonia|221020145685|2200221020145685|2!n2!n11!n1!n|^(\d{2})(\d{2})(\d{11})(\d{1})$|16|EE382200221020145685|EE2!n2!n2!n11!n1!n|^EE(\d{2})(\d{2})(\d{2})(\d{11})(\d{1})$|20|0|1|||2011-06-20|1|1|15|15|ee|EE||EUR|www.eestipank.ee|Bank of Estonia
FI|Finland|123456-785|12345600000785|6!n7!n1!n|^(\d{6})(\d{7})(\d{1})$|14|FI2112345600000785|FI2!n6!n7!n1!n|^FI(\d{2})(\d{6})(\d{7})(\d{1})$|18|0|2|||2013-08-05|1|1|13|13|fi|FI||EUR|www.suomenpankki.fi|Bank of Finland
AX|Åland Islands|123456-785|12345600000785|6!n7!n1!n|^(\d{6})(\d{7})(\d{1})$|14|AX2112345600000785|AX2!n6!n7!n1!n|^AX(\d{2})(\d{6})(\d{7})(\d{1})$|18|0|2|||2013-09-05|1|1|||ax|AX|FI|EUR|www.suomenpankki.fi|Bank of Finland
FR|France|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|FR1420041010050500013M02606|FR2!n5!n5!n11!c2!n|^FR(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2013-08-28|1|1|21|22|fr|FR||EUR|www.banque-france.fr|Bank of France (Banque de France)
GF|French Guiana|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|GF4120041010050500013M02606|GF2!n5!n5!n11!c2!n|^GF(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2013-08-28|1|1|21|22|gf|GF|FR|EUR|www.banque-france.fr|Bank of France (Banque de France)
PF|French Polynesia|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|PF5720041010050500013M02606|PF2!n5!n5!n11!c2!n|^PF(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2011-06-20|0|1|21|22|pf|PF|FR|XPF|www.ieom.fr|Overseas Issuing Institute (Institut d'émission d'Outre-Mer)
TF|French Southern Territories|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|TF2120041010050500013M02606|TF2!n5!n5!n11!c2!n|^TF(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2011-06-20|0|1|21|22|tf|TF|FR|EUR|www.banque-france.fr|Bank of France (Banque de France)
GP|Guadelope|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|GP1120041010050500013M02606|GP2!n5!n5!n11!c2!n|^GP(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2013-08-28|1|1|21|22|gp|GP|FR|EUR|www.banque-france.fr|Bank of France (Banque de France)
MQ|Martinique|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|MQ5120041010050500013M02606|MQ2!n5!n5!n11!c2!n|^MQ(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2013-08-28|1|1|21|22|mq|MQ|FR|EUR|www.banque-france.fr|Bank of France (Banque de France)
YT|Mayotte|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|YT3120041010050500013M02606|YT2!n5!n5!n11!c2!n|^YT(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2013-08-28|1|1|21|22|yt|YT|FR|EUR|www.banque-france.fr|Bank of France (Banque de France)
NC|New Caledonia|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|NC8420041010050500013M02606|NC2!n5!n5!n11!c2!n|^NC(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2011-06-20|0|1|21|22|nc|NC|FR|XPF|www.ieom.fr|Overseas Issuing Institute (Institut d'émission d'Outre-Mer)
RE|Réunion|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|RE4220041010050500013M02606|RE2!n5!n5!n11!c2!n|^RE(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2013-08-28|1|1|21|22|re|RE|FR|EUR|www.banque-france.fr|Bank of France (Banque de France)
BL|Saint Barthélemy|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|BL6820041010050500013M02606|BL2!n5!n5!n11!c2!n|^BL(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2013-02-08|0|1|21|22||BL|FR|EUR|www.banque-france.fr|Bank of France (Banque de France)
MF|Saint Martin (French Part)|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|MF8420041010050500013M02606|MF2!n5!n5!n11!c2!n|^MF(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2013-02-08|0|1|21|22||MF|FR|EUR|www.banque-france.fr|Bank of France (Banque de France)
PM|Saint-Pierre and Miquelon|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|PM3620041010050500013M02606|PM2!n5!n5!n11!c2!n|^PM(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2013-08-28|1|1|21|22|pm|PM|FR|EUR|www.banque-france.fr|Bank of France (Banque de France)
WF|Wallis and Futuna|20041 01005 0500013M026 06|20041010050500013M02606|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|WF9120041010050500013M02606|WF2!n5!n5!n11!c2!n|^WF(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2011-06-20|0|1|21|22|wf|WF|FR|XPF|www.ieom.fr|Overseas Issuing Institute (Institut d'émission d'Outre-Mer)
GA|Gabon|15200001069 63|42001007341520000106963|5!n5!n11!n2!n|^(\d{5})(\d{5})(\d{11})(\d{2})$|23|GA2142001007341520000106963|GA2!n5!n5!n11!n2!n|^GA(\d{2})(\d{5})(\d{5})(\d{11})(\d{2})$|27|0|4|5|9|2017-08-03|0|0|21|23|ga|GA||XAF|www.beac.int|Bank of Central African States
GE|Georgia|0000000101904917|NB0000000101904917|2!a16!n|^([A-Z]{2})(\d{16})$|18|GE29NB0000000101904917|GE2!n2!a16!n|^GE(\d{2})([A-Z]{2})(\d{16})$|22|0|1|||2011-06-20|0|1|||ge|GE||GEL|www.nbg.gov.ge|National Bank of Georgia
DE|Germany|37040044-532013000|370400440532013000|8!n10!n|^(\d{8})(\d{10})$|18|DE89370400440532013000|DE2!n8!n10!n|^DE(\d{2})(\d{8})(\d{10})$|22|0|7|||2011-06-20|1|1|||de|DE||EUR|www.bundesbank.de|Deutsche Bundesbank
GI|Gibraltar|0000 00007099 453|NWBK000000007099453|4!a15!c|^([A-Z]{4})([A-Za-z0-9]{15})$|19|GI75NWBK000000007099453|GI2!n4!a15!c|^GI(\d{2})([A-Z]{4})([A-Za-z0-9]{15})$|23|0|3|||2011-06-20|1|1|||gi|GI||GIP|www.gibraltar.gov.gi|Government of Gibraltar
GR|Greece|01250000000012300695|01101250000000012300695|3!n4!n16!c|^(\d{3})(\d{4})([A-Za-z0-9]{16})$|23|GR1601101250000000012300695|GR2!n3!n4!n16!c|^GR(\d{2})(\d{3})(\d{4})([A-Za-z0-9]{16})$|27|0|2|3|6|2011-06-20|1|1|||gr|GR||EUR|www.nbg.gr|National Bank of Greece
GT|Guatemala|01020000001210029690|TRAJ01020000001210029690|4!c20!c|^([A-Za-z0-9]{4})([A-Za-z0-9]{20})$|24|GT82TRAJ01020000001210029690|GT2!n4!c20!c|^GT(\d{2})([A-Za-z0-9]{4})([A-Za-z0-9]{20})$|28|0|3|||2012-05-29|0|1|||gt|GT||GTQ|www.banguat.gob.gt|Bank of Guatemala
GW|Guinea-Bissau|0181800637601|GW1430010181800637601|2!c2!n4!n11!n2!n|^([A-Za-z0-9]{2}\d{2})(\d{4})(\d{11})(\d{2})$|21|GW04GW1430010181800637601|GW2!n2!c2!n4!n11!n2!n|^GW(\d{2})([A-Za-z0-9]{2}\d{2})(\d{4})(\d{11})(\d{2})$|25|0|3|4|7|2017-08-03|0|0|||gw|GW||XOF|www.bceao.int|Central Bank of West African States
HN|Honduras|123124|PISA00000000000000123124|4!a20!n|^([A-Za-z]{4})(\d{20})$|24|HN54PISA00000000000000123124|HN2!n4!a20!n|^HN(\d{2})([A-Za-z]{4})(\d{20})$|28|0|3|||2017-08-03|0|0|||hn|HN||HNL|www.bch.hn|Central Bank of Honduras
HU|Hungary|11773016-11111018-00000000|117730161111101800000000|3!n4!n1!n15!n1!n|^(\d{3})(\d{4})(\d{1})(\d{15})(\d{1})$|24|HU42117730161111101800000000|HU2!n3!n4!n1!n15!n1!n|^HU(\d{2})(\d{3})(\d{4})(\d{1})(\d{15})(\d{1})$|28|0|2|3|6|2011-06-20|1|1|23|23|hu|HU||HUF|english.mnb.hu|Magyar Nemzeti Bank (Central Bank of Hungary)
IS|Iceland|0159-26-007654-551073-0339|0159260076545510730339|4!n2!n6!n10!n|^(\d{4})(\d{2})(\d{6})(\d{10})$|22|IS140159260076545510730339|IS2!n4!n2!n6!n10!n|^IS(\d{2})(\d{4})(\d{2})(\d{6})(\d{10})$|26|0|3|6|11|2011-06-20|1|1|||is|IS||ISK|www.sedlabanki.is|Central Bank of Iceland
AA|IIBAN (Internet)|0011123Z5678|0011123Z5678|12!a|^[A-Z0-9]{12}$|12|AA110011123Z5678|AA2!n12!a|^AA(\d{2})([A-Z0-9]{12})$|16|0|3||||0|0||||||||
IR|Iran|1234123412341234123412|123412341234123412|22!n|^[0-9]{22}$|22|IR081234123412341234123412|IR2!n22!n|^IR(\d{2})(\d{22})$|26|||||2016-01-22|0|0|||ir|IR||IRR|www.cbi.ir|The Central Bank of the Islamic Republic of Iran
IQ|Iraq|123456789012|NBIQ850123456789012|4!a3!n12!n|^([A-Za-z]{4})(\d{3})(\d{12})$|19|IQ98NBIQ850123456789012|IQ2!n4!a3!n12!n|^IQ(\d{2})([A-Za-z]{4})(\d{3})(\d{12})$|23|0|3|4|6|2017-08-03|0|1|||iq|IQ||IQD|www.cbi.iq|Central Bank of Iraq
IE|Ireland|93-11-52 12345678|AIBK93115212345678|4!a6!n8!n|^([A-Z]{4})(\d{6})(\d{8})$|18|IE29AIBK93115212345678|IE2!n4!a6!n8!n|^IE(\d{2})([A-Z]{4})(\d{6})(\d{8})$|22|0|3|4|9|2011-06-20|1|1|||ie|IE||EUR|www.centralbank.ie|Central Bank and Financial Services Authority of Ireland
IL|Israel|10-800-99999999|010800000099999999|3!n3!n13!n|^(\d{3})(\d{3})(\d{13})$|19|IL620108000000099999999|IL2!n3!n3!n13!n|^IL(\d{2})(\d{3})(\d{3})(\d{13})$|23|0|2|3|5|2011-06-20|0|1|||il|IL||ILS|www.bankisrael.org.il|Bank of Israel
IT|Italy|X 05428 11101 000000123456|X0542811101000000123456|1!a5!n5!n12!c|^([A-Z]{1})(\d{5})(\d{5})([A-Za-z0-9]{12})$|23|IT60X0542811101000000123456|IT2!n1!a5!n5!n12!c|^IT(\d{2})([A-Z]{1})(\d{5})(\d{5})([A-Za-z0-9]{12})$|27|1|5|6|10|2011-06-20|1|1|0|0|it|IT||EUR|www.bancaditalia.it|Bank of Italy
JO|Jordan|1310000302|CBJO0010000000000131000302|4!a4!n18!c|^([A-Z]{4})(\d{4})([A-Za-z0-9]{18})$|26|JO94CBJO0010000000000131000302|JO2!n4!a4!n18!c|^JO(\d{2})([A-Z]{4})(\d{4})([A-Za-z0-9]{18})$|30|0|3|4|7|2014-06-05|0|1|||jo|JO||JOD|www.cbj.gov.jo|Central Bank of Jordan
KZ|Kazakhstan|KZ86125KZT5004100100|125KZT5004100100|3!n13!c|^(\d{3})([A-Za-z0-9]{13})$|16|KZ86125KZT5004100100|KZ2!n3!n13!c|^KZ(\d{2})(\d{3})([A-Za-z0-9]{13})$|20|0|2|||2014-06-05|0|1|||kz|KZ||KZT|www.nationalbank.kz|National Bank of Kazakhstan
XK|Kosovo|1212 0123456789 06|1212012345678906|4!n10!n2!n|^(\d{4})(\d{10})(\d{2})$|16|XK051212012345678906|XK2!n4!n10!n2!n|^XK(\d{2})(\d{4})(\d{10})(\d{2})$|20|0|1|2|3|2016-01-21|0|1||||||EUR|www.bqk-kos.org|Central Bank of the Republic of Kosovo (Banka Qendrore e Kosovës)
KW|Kuwait|CBKU0000000000001234560101|CBKU0000000000001234560101|4!a22!c|^([A-Z]{4})([A-Za-z0-9]{22})$|26|KW81CBKU0000000000001234560101|KW2!n4!a22!c|^KW(\d{2})([A-Z]{4})([A-Za-z0-9]{22})$|30|0|3|||2016-01-21|0|1|||kw|KW||KWD|www.cbk.gov.kw|Central Bank of Kuwait
LV|Latvia|BANK 0000 4351 9500 1|BANK0000435195001|4!a13!c|^([A-Z]{4})([A-Za-z0-9]{13})$|17|LV80BANK0000435195001|LV2!n4!a13!c|^LV(\d{2})([A-Z]{4})([A-Za-z0-9]{13})$|21|0|3|||2011-06-20|1|1|||lv|LV||EUR|www.bank.lv/lat/main/all|Bank of Latvia
LB|Lebanon|01 001 901229114|0999 0000 0001 0019 0122 9114|4!n20!c|^(\d{4})([A-Za-z0-9]{20})$|24|LB62099900000001001901229114|LB2!n4!n20!c|^LB(\d{2})(\d{4})([A-Za-z0-9]{20})$|28|0|3|||2011-06-20|0|1|||lb|LB||LBP|www.bdl.gov.lb|Central Bank of Lebanon
LI|Liechtenstein|8810 2324013AA|088100002324013AA|5!n12!c|^(\d{5})([A-Za-z0-9]{12})$|17|LI21088100002324013AA|LI2!n5!n12!c|^LI(\d{2})(\d{5})([A-Za-z0-9]{12})$|21|0|4|||2012-05-29|1|1|||li|LI||CHF|www.llb.li|National Bank of Liechtenstein (Liechtensteinische Landesbank)
LT|Lithuania|1000 0111 0100 1000|10000011101001000|5!n11!n|^(\d{5})(\d{11})$|16|LT121000011101001000|LT2!n5!n11!n|^LT(\d{2})(\d{5})(\d{11})$|20|0|4|||2011-06-20|1|1|||lt|LT||EUR|www.lb.lt|Bank of Lithuania
LU|Luxembourg|0019 4006 4475 0000|0019400644750000|3!n13!c|^(\d{3})([A-Za-z0-9]{13})$|16|LU280019400644750000|LU2!n3!n13!c|^LU(\d{2})(\d{3})([A-Za-z0-9]{13})$|20|0|2|||2011-06-20|1|1|14|15|lu|LU||EUR|www.bcl.lu|Central Bank of Luxembourg
MK|Macedonia|300 0000000424 25|250120000058984|3!n10!c2!n|^(\d{3})([A-Za-z0-9]{10})(\d{2})$|15|MK07250120000058984|MK2!n3!n10!c2!n|^MK(\d{2})(\d{3})([A-Za-z0-9]{10})(\d{2})$|19|0|2|||2012-05-29|0|1|13|14|mk|MK||MKD|www.nbrm.mk|National Bank of the Republic of Macedonia
MG|Madagascar|12341234123412341234123|12341234123412341234123|23!n|^[0-9]{23}$|23|MG4012341234123412341234123|MG2!n23!n|^MG(\d{2})(\d{23})$|27|||||2016-01-22|0|0|||mg|MG||MGA|www.banque-centrale.mg|Central Bank of Madagascar
ML|Mali|A12312341234123412341234|A12312341234123412341234|1!a23!n|^[A-Z]{1}[0-9]{23}$|24|ML75A12312341234123412341234|ML2!n1!a23!n|^ML(\d{2})([A-Z]{1})(\d{23})$|28|||||2016-01-22|0|0|||ml|ML||XOF|www.bceao.int|Central Bank of West African States (BCEAO)
MT|Malta|12345MTLCAST001S|MALT011000012345MTLCAST001S|4!a5!n18!c|^([A-Z]{4})(\d{5})([A-Za-z0-9]{18})$|27|MT84MALT011000012345MTLCAST001S|MT2!n4!a5!n18!c|^MT(\d{2})([A-Z]{4})(\d{5})([A-Za-z0-9]{18})$|31|0|3|4|8|2011-06-20|1|1|||mt|MT||EUR|www.centralbankmalta.org|Central Bank of Malta
MR|Mauritania|00020 00101 00001234567 53|00020001010000123456753|5!n5!n11!n2!n|^(\d{5})(\d{5})(\d{11})(\d{2})$|23|MR1300020001010000123456753|MR2!n5!n5!n11!n2!n|^MR(\d{2})(\d{5})(\d{5})(\d{11})(\d{2})$|27|0|4|5|9|2016-06-11|0|1|21|22|mr|MR||MRO|www.bcm.mr|Central Bank of Mauritania
MU|Mauritius|BOMM 0101 1010 3030 0200 000M UR|BOMM0101101030300200000MUR|4!a2!n2!n12!n3!n3!a|^([A-Z]{4})(\d{2})(\d{2})(\d{12})(\d{3})([A-Z]{3})$|26|MU17BOMM0101101030300200000MUR|MU2!n4!a2!n2!n12!n3!n3!a|^MU(\d{2})([A-Z]{4})(\d{2})(\d{2})(\d{12})(\d{3})([A-Z]{3})$|30|0|5|6|7|2011-06-20|0|1|||mu|MU||MUR|www.bom.mu|Bank of Mauritius
MD|Moldova|00225100013104168|AG000225100013104168|2!c18!c|^([A-Za-z0-9]{2})([A-Za-z0-9]{18})$|20|MD24AG000225100013104168|MD2!n2!c18!c|^MD(\d{2})([A-Za-z0-9]{20})$|24|0|1|||2012-09-09|0|1|||md|MD||MDL|www.bnm.org|National Bank of Moldova
MC|Monaco|0011111000h|11222 00001 01234567890 30|5!n5!n11!c2!n|^(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|23|MC5811222000010123456789030|MC2!n5!n5!n11!c2!n|^MC(\d{2})(\d{5})(\d{5})([A-Za-z0-9]{11})(\d{2})$|27|0|4|5|9|2011-06-20|1|1|21|22|mc|MC||EUR||
ME|Montenegro|505 0000123456789 51|505000012345678951|3!n13!n2!n|^(\d{3})(\d{13})(\d{2})$|18|ME25505000012345678951|ME2!n3!n13!n2!n|^ME(\d{2})(\d{3})(\d{13})(\d{2})$|22|0|2|||2011-06-20|0|1|16|17|me|ME||EUR|www.cb-mn.org|Central Bank of Montenegro
MA|Morocco|00012050005349 21|011519000001205000534921|3!n5!n14!n2!n|^(\d{3})(\d{5})(\d{14})(\d{2})$|26|MA64011519000001205000534921|MA2!n3!n5!n14!n2!n|^MA(\d{2})(\d{3})(\d{5})(\d{14})(\d{2})$|28|0|2|3|7|2017-08-03|0|0|22|24|ma|MA||MAD|www.bkam.ma|Bank Al-Maghrib
MZ|Mozambique|12341234123412341|12341234123412341|21!n|^[0-9]{21}$|21|MZ97123412341234123412341|MZ2!n21!n|^MZ(\d{2})(\d{21})$|25|||||2016-01-22|0|0|||mz|MZ||MZN|www.bancomoc.mz|Bank of Mozambique
NL|Netherlands|041 71 64 300|ABNA0417164300|4!a10!n|^([A-Z]{4})(\d{10})$|14|NL91ABNA0417164300|NL2!n4!a10!n|^NL(\d{2})([A-Z]{4})(\d{10})$|18|0|3|4|3|2013-06-20|1|1|||nl|NL||EUR|www.dnb.nl|Netherlands Bank
NI|Nicaragua|3123123|BAMC000000000000000003123123|28!n|^([A-Za-z]{4})(\d{24})$|28|NI92BAMC000000000000000003123123|NI2!n4!a24!n|^NI(\d{2})([A-Za-z]{4})(\d{24})$|32|0|3|||2017-08-03|0|0|||ni|NI||NIO|www.bcn.gob.ni|Central Bank of Nicaragua
NE|Niger|01303050002 68|NE0380100100130305000268|2!a3!n5!n12!n2!n|^([A-Za-z]{2}\d{3})(\d{5})(\d{12})(\d{2})$|23|NE58NE0380100100130305000268|NE2!n2!a3!n5!n12!n2!n|^NE(\d{2})([A-Za-z]{2}\d{3})(\d{5})(\d{12})(\d{2})$|28|0|4|5|9|2017-08-03|0|0|22|23|ne|NE||XOF|www.bceao.int|Central Bank of West African States (BCEAO)
NO|Norway|8601 11 17947|86011117947|4!n6!n1!n|^(\d{4})(\d{6})(\d{1})$|11|NO9386011117947|NO2!n4!n6!n1!n|^NO(\d{2})(\d{4})(\d{6})(\d{1})$|15|0|3|||2011-06-20|1|1|10|10|no|NO||NOK|www.norges-bank.no|Central Bank of Norway (Norges Bank)
PK|Pakistan|00260101036360|SCBL0000001123456702|4!a16!c|^([A-Z]{4})([A-Za-z0-9]{16})$|20|PK36SCBL0000001123456702|PK2!n4!a16!c|^PK(\d{2})([A-Z]{4})([A-Za-z0-9]{16})$|24|0|3|||2012-05-29|0|1|||pk|PK||PKR|www.sbp.org.pk|State Bank of Pakistan
PS|Palestine|400123456702|PALS000000000400123456702|4!a21!c|^([A-Z]{4})([A-Za-z0-9]{21})$|25|PS92PALS000000000400123456702|PS2!n4!a21!c|^PS(\d{2})([A-Z]{4})([A-Za-z0-9]{21})$|29|0|3|||2013-09-05|0|1|||ps|PS||ILS|www.pma.ps|Palestine Monetary Authority
PL|Poland|61 1090 1014 0000 0712 1981 2874|109010140000071219812874|8!n16!n|^(\d{8})(\d{16})$|24|PL61109010140000071219812874|PL2!n8!n16!n|^PL(\d{2})(\d{8})(\d{16})$|28|0|7|||2011-06-20|1|1|7|7|pl|PL||PLN|www.nbp.pl|National Bank of Poland
PT|Portugal|0002.0123.12345678901.54|000201231234567890154|4!n4!n11!n2!n|^(\d{4})(\d{4})(\d{11})(\d{2})$|21|PT50000201231234567890154|PT2!n4!n4!n11!n2!n|^PT(\d{2})(\d{4})(\d{4})(\d{11})(\d{2})$|25|0|3|4|7|2013-09-05|1|1|19|20|pt|PT||EUR|www.bportugal.pt|Bank of Portugal
QA|Qatar|QA58DOHB00001234567890ABCDEFG|DOHB00001234567890ABCDEFG|4!a4!n17!c|^([A-Z]{4})(\d{4})([A-Za-z0-9]{17})$|25|QA58DOHB00001234567890ABCDEFG|QA2!n4!a4!n17!c|^QA(\d{2})([A-Z]{4})(\d{4})([A-Za-z0-9]{17})$|29|0|3|4|7|2014-06-05|0|1|||qa|QA||QAR|www.qcb.gov.qa|Qatar Central Bank
RO|Romania|AAAA 1B31 0075 9384 0000|AAAA1B31007593840000|4!a16!c|^([A-Z]{4})([A-Za-z0-9]{16})$|20|RO49AAAA1B31007593840000|RO2!n4!a16!c|^RO(\d{2})([A-Z]{4})([A-Za-z0-9]{16})$|24|0|3|||2011-06-20|1|1|||ro|RO||RON|www.bnro.ro|National Bank of Romania
LC|Saint Lucia|0001 0001 0012 0012 0002 3015|HEMM000100010012001200023015|4!a24!c|^([A-Z]{4})([A-Za-z0-9]{24})$|28|LC55HEMM000100010012001200023015|LC2!n4!a24!c|^LC(\d{2})([A-Z]{4})([A-Za-z0-9]{24})$|32|0|3|||2016-04-15|0|1|||lc|LC||XCD|www.eccb-centralbank.org|Eastern Caribbean Central Bank
SM|San Marino|U032 2509 8000 0000 0270 100|U0322509800000000270100|1!a5!n5!n12!c|^([A-Z]{1})(\d{5})(\d{5})([A-Za-z0-9]{12})$|23|SM86U0322509800000000270100|SM2!n1!a5!n5!n12!c|^SM(\d{2})([A-Z]{1})(\d{5})(\d{5})([A-Za-z0-9]{12})$|27|1|5|6|10|2011-06-20|1|1|0|0|sm|SM||EUR|www.bcsm.sm|Central Bank of the Republic of San Marino
ST|São Tomé and Príncipe|518453101|0001000100518453101|8!n11!n2!n|^(\d{8})(\d{11})(\d{2})$|21|ST68000100010051845310112|ST2!n8!n11!n2!n|^ST(\d{2})(\d{8})(\d{11})(\d{2})$|25|0|3|4|7|2016-01-21|0|1|||st|ST||STD|www.bcstp.st|Central Bank of São Tomé and Príncipe
SA|Saudi Arabia|608010167519|80000000608010167519|2!n18!c|^(\d{2})([A-Za-z0-9]{18})$|20|SA0380000000608010167519|SA2!n2!n18!c|^SA(\d{2})(\d{2})([A-Za-z0-9]{18})$|24|0|1|||2012-05-29|0|1|||sa|SA||SAR|www.sama.gov.sa|Saudi Arabian Monetary Agency
SN|Senegal|A12312341234123412341234|A12312341234123412341234|1!a23!n|^[A-Z]{1}[0-9]{23}$|24|SN15A12312341234123412341234|SN2!n1!a23!n|^SN(\d{2})([A-Z]{1})(\d{23})$|28|||||2016-01-22|0|0|||sn|SN||XOF|www.bceao.int|Central Bank of West African States (BCEAO)
RS|Serbia|260-0056010016113-79|260005601001611379|3!n13!n2!n|^(\d{3})(\d{13})(\d{2})$|18|RS35260005601001611379|RS2!n3!n13!n2!n|^RS(\d{2})(\d{3})(\d{13})(\d{2})$|22|0|2|||2011-06-20|0|1|16|17|rs|RS||RSD|www.nbs.rs|National Bank of Serbia
SC|Seychelles|0000000000001497|SSCB11010000000000001497USD|4!a2!n2!n16!n3!a|^([A-Z]{4})(\d{2})(\d{2})(\d{16})([A-Z]{3})$|27|SC18SSCB11010000000000001497USD|SC2!n4!a2!n2!n16!n3!a|^SC(\d{2})([A-Z]{4})(\d{2})(\d{2})(\d{16})([A-Z]{3})$|31|0|3|4|7|2020-01-01|0|1|||sc|SC||SCR|www.cbs.sc|Central Bank of Seychelles
SK|Slovakia|19-8742637541/1200|12000000198742637541|4!n6!n10!n|^(\d{4})(\d{6})(\d{10})$|20|SK3112000000198742637541|SK2!n4!n6!n10!n|^SK(\d{2})(\d{4})(\d{6})(\d{10})$|24|0|3|4|9|2011-06-20|1|1|19|19|sk|SK||EUR|www.nbs.sk|National Bank of Slovakia
SI|Slovenia|2633 0001 2039 086|263300012039086|5!n8!n2!n|^(\d{5})(\d{8})(\d{2})$|15|SI56191000000123438|SI2!n5!n8!n2!n|^SI(\d{2})(\d{5})(\d{8})(\d{2})$|19|0|1|2|4|2012-09-09|1|1|13|14|si|SI||EUR|www.bsi.si|Bank of Slovenia
ES|Spain|2100 0418 45 0200051332|21000418450200051332|4!n4!n1!n1!n10!n|^(\d{4})(\d{4})(\d{1})(\d{1})(\d{10})$|20|ES9121000418450200051332|ES2!n4!n4!n1!n1!n10!n|^ES(\d{2})(\d{4})(\d{4})(\d{1})(\d{1})(\d{10})$|24|0|3|4|7|2013-09-05|1|1|8|9|es|ES||EUR|www.bde.es|Bank of Spain
SE|Sweden|1234 12 3456 1|5000 0000 0583 9825 7466|3!n16!n1!n|^(\d{3})(\d{16})(\d{1})$|20|SE4550000000058398257466|SE2!n3!n16!n1!n|^SE(\d{2})(\d{3})(\d{16})(\d{1})$|24|0|2|||2011-06-20|1|1|19|19|se|SE||SEK|www.riksbank.com|Bank of Sweden (Sveriges Riksbank)
CH|Switzerland|762 1162-3852.957|00762011623852957|5!n12!c|^(\d{5})([A-Za-z0-9]{12})$|17|CH9300762011623852957|CH2!n5!n12!c|^CH(\d{2})(\d{5})([A-Za-z0-9]{12})$|21|0|4|||2011-06-20|1|1|||ch|CH||CHF|www.snb.ch|Swiss National Bank
TL|Timor-Leste|008 00123456789101 57|0080012345678910157|3!n 14!n 2!n|^(\d{3})(\d{14})(\d{2})$|19|TL380080012345678910157|TL2!n3!n14!n2!n|^TL(\d{2})(\d{3})(\d{14})(\d{2})$|23|0|3|4|6|2016-01-21|0|1|17|18|tl|TL||USD|www.bancocentral.tl|Central Bank of Timor-Leste (Banco Central de Timor-Leste)
TG|Togo|43103465004000 70|TG0090604310346500400070|2!a3!n5!n12!n2!n|^([A-Za-z]{2}\d{3})(\d{5})(\d{12})(\d{2})$|26|TG53TG0090604310346500400070|TG2!n2!a3!n5!n12!n2!n|^TG(\d{2})([A-Za-z]{2}\d{3})(\d{5})(\d{12})(\d{2})$|28|0|4|5|9|2017-08-03|0|0|22|24|tg|TG||XOF|www.bceao.int|Central Bank of West African States (BCEAO)
TN|Tunisia|10 006 0351835984788 31|10006035183598478831|2!n3!n13!n2!n|^(\d{2})(\d{3})(\d{13})(\d{2})$|20|TN5910006035183598478831|TN2!n2!n3!n13!n2!n|^TN(\d{2})(\d{2})(\d{3})(\d{13})(\d{2})$|24|0|1|2|4|2011-06-20|0|1|18|19|tn|TN||TND|www.bct.gov.tn|Central Bank of Tunisia
TR|Turkey|TR33 0006 1005 1978 6457 8413 26|0006100519786457841326|5!n1!n16!c|^(\d{5})(\d{1})([A-Za-z0-9]{16})$|22|TR330006100519786457841326|TR2!n5!n1!n16!c|^TR(\d{2})(\d{5})(\d{1})([A-Za-z0-9]{16})$|26|0|4|||2016-01-21|0|1|||tr|TR||TRY|www.tcmb.gov.tr|Central Bank of the Republic of Turkey
UA|Ukraine|3996220000026007233566001|3996220000026007233566001|6!n19!c|^[0-9]{6}[A-Za-z0-9]{19}$|25|UA213996220000026007233566001|UA2!n6!n19!c|^UA(\d{2})(\d{6})([A-Za-z0-9]{19})$|29|0|5|||2016-01-22|0|0|||ua|UA||UAH|www.bank.gov.ua|National Bank of Ukraine
AE|United Arab Emirates|1234567890123456|0331234567890123456|3!n16!n|^(\d{3})(\d{16})$|19|AE070331234567890123456|AE2!n3!n16!n|^AE(\d{2})(\d{3})(\d{16})$|23|0|2|||2011-06-20|0|1|||ae|AE||AED|www.centralbank.ae|Central Bank of the United Arab Emirates
GB|United Kingdom|60-16-13 31926819|NWBK60161331926819|4!a6!n8!n|^([A-Z]{4})(\d{6})(\d{8})$|18|GB29NWBK60161331926819|GB2!n4!a6!n8!n|^GB(\d{2})([A-Z]{4})(\d{6})(\d{8})$|22|0|3|4|9|2011-06-20|1|1|||uk|GB||GBP|www.bankofengland.co.uk|Bank of England

24
lib/php-iban/utils/bis-banks

@ -0,0 +1,24 @@
#!/usr/bin/php
<?php
$url = 'http://www.bis.org/cbanks.htm';
$data = file_get_contents($url);
# cut data before table
$data = preg_replace('/^.*<div class="country_institutions">/ms','',$data);
# cut data after table
$data = preg_replace('/<\/tbody>.*$/ms','',$data);
# split in to rows
preg_match_all('/<tr>.*?<td valign="top"><a id="country_([A-Z]{2})" name="country_.." href="[^"]+">([^<>]+)<\/a><\/td>.*?<td valign="top"><a class="external" target="_blank" href="\/dcms\/goto.jsp\?([^"]+)">([^<>]+)<\/a><\/td>.*?<\/tr>/s',$data,$matches);
# remove whole-row capture
array_shift($matches);
# display results
for($i=0;$i<count($matches[0]);$i++) {
print $matches[0][$i] . "|" . $matches[1][$i] . "|" . $matches[2][$i] . "|" . $matches[3][$i] . "\n";
}
?>

319
lib/php-iban/utils/convert-registry.php

@ -0,0 +1,319 @@
<?php
# this script converts the IBAN_registry.txt file's entries to registry.txt format (php-iban's required internal format).
# init
require_once(dirname(dirname(__FILE__)) . '/php-iban.php');
date_default_timezone_set('UTC'); # mutes a warning
# read registry
$data = `iconv -f utf8 -t ascii --byte-subst="<0x%x>" --unicode-subst="<U+%04X>" 'IBAN_Registry.txt'`;
if($data == '') { die("Couldn't read IBAN_Registry.txt - try downloading from the location described in the REGISTRY-URL file."); }
# print header line
print "country_code|country_name|domestic_example|bban_example|bban_format_swift|bban_format_regex|bban_length|iban_example|iban_format_swift|iban_format_regex|iban_length|bban_bankid_start_offset|bban_bankid_stop_offset|bban_branchid_start_offset|bban_branchid_stop_offset|registry_edition|country_sepa\n";
# break in to lines
$lines = preg_split('/[\r\n]+/',$data);
# display
foreach($lines as $line) {
# if it's not a blank line, and it's not the header row
if($line != '' && !preg_match('/SEPA Country/',$line)) {
# extract individual tab-separated fields
$bits = explode("\t",$line);
# remove quotes and superfluous whitespace on fields that have them.
for($i=0;$i<count($bits);$i++) {
$bits[$i] = preg_replace('/^"(.*)"$/','$1',$bits[$i]);
$bits[$i] = preg_replace('/^ */','',$bits[$i]);
$bits[$i] = preg_replace('/ *$/','',$bits[$i]);
}
# assigned fields to named variables
# print "-------\n";
# print $line;
# print "-------\n";
list($country_name,$country_code,$domestic_example,$bban,$bban_structure,$bban_length,$bban_bi_position,$bban_bi_length,$bban_bi_example,$bban_example,$iban,$iban_structure,$iban_length,$iban_electronic_example,$iban_print_example,$country_sepa,$contact_details) = $bits;
# sanitise
$country_code = strtoupper(substr($country_code,0,2)); # sanitise comments away
$bban_structure = preg_replace('/[:;]/','',$bban_structure); # errors seen in Germany, Hungary entries
$iban_structure = preg_replace('/, .*$/','',$iban_structure); # duplicates for FO, GL seen in DK
$iban_electronic_example = preg_replace('/, .*$/','',$iban_electronic_example); # duplicates for FO, GL seen in DK
if($country_code=='MU') {
$iban_electronic_example = str_replace(' ','',$iban_electronic_example); # MU example has a spurious space
}
if($country_code=='CZ') {
$iban_electronic_example = preg_replace('/ \w{10,}+$/','',$iban_electronic_example); # extra example for CZ
$iban_print_example = preg_replace('/^(CZ.. .... .... .... .... ....).*$/','$1',$iban_print_example); # extra example
}
if($country_code=='FI') {
# remove additional example
$iban_electronic_example = preg_replace('/ or .*$/','',$iban_electronic_example);
# fix bban example to remove verbosity and match domestic example
$bban = '12345600000785';
}
if($country_code=='KZ') {
# fix presence of multiline free-text in KZ IBAN structure field
$iban_structure = '2!a2!n3!n13!c';
}
if($country_code=='QA') {
# fix the lack BBAN structure provision in the TXT format registry
$bban_structure = '4!a4!n17!c';
# fix broken IBAN structure provision
$iban_structure = 'QA2!n4!a4!n17!c';
}
if($country_code=='JO') {
$bban_bi_length=4; # not '4!a' as suggested
}
$iban_print_example = preg_replace('/, .*$/','',$iban_print_example); # DK includes FO and GL examples in one record
# drop leading 2!a in iban structure.
# .. should actually be the country code in question
if(substr($iban_structure,0,3) == '2!a') {
$iban_structure = $country_code . substr($iban_structure,3);
}
# calculate $bban_regex from $bban_structure
$bban_regex = swift_to_regex($bban_structure);
# calculate $iban_regex from $iban_structure
$iban_regex = swift_to_regex($iban_structure);
print "[DEBUG] got $iban_regex from $iban_structure\n";
# debugging
if(true) {
print "[$country_name ($country_code)]\n";
print "Domestic account number example: $domestic_example\n";
print "BBAN structure: $bban_structure\n";
print "BBAN length: $bban_length\n";
print "BBAN bank identifier position: $bban_bi_position\n";
print "BBAN bank identifier length: $bban_bi_length\n";
print "BBAN bank identifier example: $bban_bi_example\n";
print "BBAN example: $bban_example\n";
print "BBAN regex (calculated): $bban_regex\n";
print "IBAN structure: $iban_structure\n";
print "IBAN length: $iban_length\n";
print "IBAN electronic format example: $iban_electronic_example\n";
print "IBAN print format example: $iban_print_example\n";
print "IBAN Regex (calculated): $iban_regex\n";
print "SEPA country: $country_sepa\n";
print "Contact details: $contact_details\n\n";
}
# calculate numeric $bban_length
$bban_length = preg_replace('/[^\d]/','',$bban_length);
# calculate numeric $iban_length
$iban_length = preg_replace('/[^\d]/','',$iban_length);
# calculate bban_bankid_<start|stop>_offset
# .... First we have to parse the freetext $bban_bi_position, eg:
# Bank Identifier 1-3, Branch Identifier
# Position 1-2
# Positions 1-2
# Positions 1-3
# Positions 1-3 ;Branch is not available
# Positions 1-3, Branch identifier
# Positions 1-3, Branch identifier positions
# Positions 1-4
# Positions 1-4, Branch identifier
# Positions 1-4, Branch identifier positions
# Positions 1-5
# Positions 1-5 (positions 1-2 bank identifier; positions 3-5 branch identifier). In case of payment institutions Positions 1-5, Branch identifier positions
# Positions 1-6, Branch identifier positions
# Positions 1-6. First two digits of bank identifier indicate the bank or banking group (For example, 1 or 2 for Nordea, 31 for Handelsbanken, 5 for cooperative banks etc)
# Positions 1-7
# Positions 1-8
# Positions 2-6, Branch identifier positions
# positions 1-3, Branch identifier positions
#
# ... our algorithm is as follows:
# - find all <digit>-<digit> tokens
preg_match_all('/(\d)-(\d\d?)/',$bban_bi_position,$matches);
# - discard overlaps ({1-5,1-2,3-5} becomes {1-2,3-5})
$tmptokens = array();
for($j=0;$j<count($matches[0]);$j++) {
#print "tmptokens was... " . print_r($tmptokens,1) . "\n";
$from = $matches[1][$j];
$to = $matches[2][$j];
# (if we don't yet have a match starting here, or it goes further,
# overwrite the match-from-this-position record)
if(!isset($tmptokens[$from]) || $to < $tmptokens[$from]) {
$tmptokens[$from] = $to;
}
}
unset($matches); # done
# - assume the token starting from position 1 is the bank identifier
# (or, if it does not exist, the token starting from position 2)
$bban_bankid_start_offset = 0; # decrement 1 on assignment
if(isset($tmptokens[1])) {
$bban_bankid_stop_offset = $tmptokens[1]-1; # decrement 1 on assignment
unset($tmptokens[1]);
}
else {
$bban_bankid_stop_offset = $tmptokens[2]-1; # decrement 1 on assignment
unset($tmptokens[2]);
}
# - assume any subsequent token, if present, is the branch identifier.
$tmpkeys = array_keys($tmptokens);
$start = array_shift($tmpkeys);
unset($tmpkeys); # done
$bban_branchid_start_offset='';
$bban_branchid_stop_offset='';
if($start!= '') {
# we have a branch identifier!
$bban_branchid_start_offset=$start-1;
$bban_branchid_stop_offset=$tmptokens[$start]-1;
}
else {
# (note: this codepath occurs for around two thirds of all records)
# we have not yet found a branch identifier. HOWEVER, we can analyse the
# structure of the BBAN to determine whether there is more than one
# remaining non-tiny field (tiny fields on the end of a BBAN typically
# being checksums) and, if so, assume that the first/shorter one is the
# branch identifier.
$reduced_bban_structure = preg_replace('/^\d+![nac]/','',$bban_structure);
# print "[DEBUG] reduced BBAN structure = $reduced_bban_structure\n";
$tokens = swift_tokenize($reduced_bban_structure,1);
# print "[DEBUG] tokens = " + json_encode($tokens,1);
# discard any tokens of length 1 or 2
for($t=0;$t<count($tokens[0]);$t++) {
if($tokens[1][$t] < 3) {
$tokens['discarded'][$t] = 1;
}
}
# interesting fields are those that are not discarded...
if(!isset($tokens['discarded'])) {
$interesting_field_count = count($tokens[0]); }
else {
$interesting_field_count = (count($tokens[0])-count($tokens['discarded']));
}
# print "[DEBUG] interesting field count = $interesting_field_count\n";
# ...if we have at least two of them, there's a branchid-type field
if($interesting_field_count >= 2) {
# now loop through until we assign the branchid start offset
# (this occurs just after the first non-discarded field)
$found=0;
for($f=0; (($found==0) && ($f<count($tokens[0]))); $f++) {
# if this is a non-discarded token, of >2 length...
if((!isset($tokens['discarded'][$f]) || $tokens['discarded'][$f] != 1) && $tokens[1][$f]>2) {
# ... then assign.
$pre_offset = $bban_bankid_stop_offset+1; # this is the offset before we reduced the structure to remove the bankid field
$bban_branchid_start_offset = $pre_offset + $tokens['offset'][$f];
$bban_branchid_stop_offset = $pre_offset + $tokens['offset'][$f] + $tokens[1][$f] - 1; # decrement by one on assignment
$found=1;
}
}
}
}
# fix for Jordan
if($country_code == 'JO') {
$bban_bankid_start_offset = 0;
$bban_bankid_stop_offset = 3;
$bban_branchid_start_offset = 4;
$bban_branchid_stop_offset = 7;
}
# calculate 1=Yes, 0=No for $country_sepa
# NOTE: This is buggy due to the free inclusion of random text by the registry publishers.
# Notably it requires modification for places like Finland and Portugal where these
# comments are known to exist.
if(strtolower($country_sepa)=='yes') { $country_sepa=1; } else { $country_sepa = 0; }
# set registry edition
$registry_edition = date('Y-m-d');
# now prepare generate our registry lines...
$to_generate = array($country_code=>$country_name);
if($country_code == 'DK') {
$to_generate = array('DK'=>$country_name,'FO'=>'Faroe Islands','GL'=>'Greenland');
}
elseif($country_code == 'FR') {
$to_generate = array('FR'=>$country_name,'BL'=>'Saint Barthelemy','GF'=>'French Guyana','GP'=>'Guadelope','MF'=>'Saint Martin (French Part)','MQ'=>'Martinique','RE'=>'Reunion','PF'=>'French Polynesia','TF'=>'French Southern Territories','YT'=>'Mayotte','NC'=>'New Caledonia','PM'=>'Saint Pierre et Miquelon','WF'=>'Wallis and Futuna Islands');
}
# output loop
foreach($to_generate as $country_code=>$country_name) {
# fixes for fields duplicating country code
#print "CHECKSUM-BEFORE[$country_code] = $iban_electronic_example\n";
$iban_electronic_example = iban_set_checksum($country_code . substr($iban_electronic_example,2));
#print "CHECKSUM-AFTER[$country_code] = $iban_electronic_example\n";
$iban_structure = $country_code . substr($iban_structure,2);
# step 1
$iban_regex_fixed = '^' . $country_code;
$tmp_country_code = substr($iban_regex,1,2);
#print "[DEBUG] $tmp_country_code\n";
# route #1 ... here we are dealing with a country code in the string already
if(preg_match('/^[A-Z][A-Z]$/',$tmp_country_code)) {
#print "[DEBUG] route #1\n";
$iban_regex_fixed = $iban_regex_fixed . substr($iban_regex,3);
}
# route #2 ... here there is no country code yet present
else {
#print "[DEBUG] route #2\n";
$iban_regex_fixed = $iban_regex_fixed . substr($iban_regex,1);
}
#print "[DEBUG] substited '$iban_regex_fixed' for '$iban_regex'\n";
# output
print "$country_code|$country_name|$domestic_example|$bban_example|$bban_structure|$bban_regex|$bban_length|$iban_electronic_example|$iban_structure|$iban_regex_fixed|$iban_length|$bban_bankid_start_offset|$bban_bankid_stop_offset|$bban_branchid_start_offset|$bban_branchid_stop_offset|$registry_edition|$country_sepa\n";
}
}
}
# swift_to_regex()
# converts the SWIFT IBAN format specifications to regular expressions
# eg: 4!n6!n1!n -> ^(\d{4})(\d{6})(\d{1})$
function swift_to_regex($swift) {
# first find tokens
$matches = swift_tokenize($swift);
# now replace bits
$tr = '^' . $swift . '$';
# loop through each matched token
for($i=0;$i<count($matches[0]);$i++) {
# calculate replacement
$replacement = '(TOKEN)';
# type 'n'
if($matches[3][$i] == 'n') {
$replacement = '(\d{length})';
}
# type 'c'
elseif($matches[3][$i] == 'c') {
$replacement = '([A-Za-z0-9]{length})';
}
# type 'a'
elseif($matches[3][$i] == 'a') {
$replacement = '([A-Z]{length})';
#' . $matches[1][$i] . '})';
}
else {
print "unknown type: $matches[3][$i]\n";
exit(1);
}
# now add length indicator to the token
$length = '(LENGTH)';
if($matches[2][$i] == '!') {
$length = $matches[1][$i];
}
else {
$length = '1,' . $matches[1][$i];
}
$replacement = preg_replace('/length/',$length,$replacement,1);
# finally, replace the entire token with the replacement
$tr = preg_replace('/' . $matches[0][$i] . '/',$replacement,$tr,1);
}
return $tr;
}
# swift_tokenize()
# fetch individual tokens in a swift structural string
function swift_tokenize($string,$calculate_offsets=0) {
preg_match_all('/((?:\d*?[1-2])?\d)(!)?([anc])/',$string,$matches);
if($calculate_offsets) {
$current_offset=0;
for($i=0;$i<count($matches[0]);$i++) {
$matches['offset'][$i] = $current_offset;
$current_offset+=$matches[1][$i];
}
#print "ANALYSE[raw]: " . join(',',$matches['offset']);
}
return $matches;
}
?>

15
lib/php-iban/utils/dump.php

@ -0,0 +1,15 @@
<?php
# Engine configuration
# - first we enable error display
ini_set('display_errors',1);
# - next we ensure that all errors are displayed
ini_set('error_reporting',E_ALL);
# include the library itself
require_once(dirname(dirname(__FILE__)) . '/php-iban.php');
# display registry contents
print_r($_iban_registry);
?>

10
lib/php-iban/utils/example-ibans/ae-ibans

@ -0,0 +1,10 @@
AE020200000030124176201
AE07 0331 2345 6789 0123 456
AE14 0340 0000 1401 1019 050
AE260211000000230064016
AE320030000100228001001
AE320030010274073001001
AE320330000010195510887
AE730030000789456123456
AE940350000000250008661
AE950260001261025056501

78
lib/php-iban/utils/example-ibans/al-ibans

@ -0,0 +1,78 @@
AL 79208110080000001043631801
AL 45209516090000600388970102
AL 56209516090000600388970001
AL 25208110080000001043631803
AL 79208110080000001043631801
AL77202110130000000000584625
AL27202110130000000001584625
AL4920511021633875CLTJCLALLD
AL41212110160000000000424721
AL84901111230031371010000013
AL85 2021 1037 0000 0000 0620 5792
AL05 2141 1144 0111 2930 4302 0418
AL80 2081 1008 0000 0203 8723 5304
AL94 2061 1042 0000 1403 1194 6102
AL47 2091 1108 0000 1087 4155 0001
AL22 2101 1050 0005 0002 0000 2150
AL85 9021 1209 0201 2300 1425 5899
AL50 9011 1051 0025 3380 1000 0012
AL05 2121 1016 0000 0000 0025 2224
AL19 2071 1018 0000 0103 0013 5605
AL76 2131 1044 0000 0000 0089 6731
AL88 2031 1027 2010 1520 1101 1264
AL94 2151 1031 ALL1 0000 0373 9100
AL44 2041 1017 0000 0000 0001 4315
AL29 2121 1016 0000 0000 0030 0001
AL72 2121 1016 0000 0000 0030 0003
AL02 2121 1016 0000 0000 0030 0002
AL38202110130000000000157945
AL85202110130000000001157945
AL35202110130000000002157945
AL4420511014328886CLTJCLALLA
AL11 2051 1014 3288 86CL TJCF EURA
AL55 2051 1014 3288 86CL TJCF USDA
AL47 2061 1183 0000 0108 2000 0011
AL20 2061 1183 0000 0108 2000 0012
AL74 2061 1183 0000 0108 2000 0010
AL37208110080000002024530701
AL10208110080000002024530702
AL80208110080000002024530703
AL50 2141 1209 0111 1009 2516 0413
AL40 2141 1209 0111 1009 2525 0221
AL66 2141 1209 0111 1009 2525 0141
AL86213110130000000000841534
AL32213110130000000000841536
AL05213110130000000000841537
AL38210110120000000000038968
AL21210110120000000000071963
AL38210110120000000000048280
AL43901110130022099710000018
AL76901110130022099710016011
AL20901110130022099710001014
AL84 2041 1017 0000 0000 0001 1655
AL60203110032010152011010928
AL71203110032010149011010929
AL88203110032010140011010929
AL 05 2121 1016 0000 0000 0028 8405
AL48212110160000000000288407
AL21212110160000000000288408
AL50212110160000000000691794
AL51202110130000000100011257
AL35202110130000008000011257
AL 05 2121 1016 0000 0000 0028 8405
AL 4920 5110 1427 3430 CLTJCLALLA
AL14202110130000000001002859
AL81202110130000000021002859
AL96202110130000000011002859
AL14202110130000000001002859
AL96202110130000000011002859
AL81202110130000000021002859
AL14202110130000000001002859
AL96202110130000000011002859
AL81202110130000000021002859
AL70207110320000030300030901
AL23207110320000030300020301
AL39207110320000030300020207
AL84202110130000008020003045
AL69202110130000008030003045
AL80202110130000000101003045

39
lib/php-iban/utils/example-ibans/ao-ibans

@ -0,0 +1,39 @@
AO 0600 5100 0014 3278 4710 124
AO 06 0006 0000 1119838830143
AO.0600520000036650 3410149
AO (060) 006 000 000 114 658 31 132
AO 06000600000173927530298
AO 0600 5100 0062 4581 8010 124
AO 0600 5300 0000 1579 3010 113
AO 0600 5300 0000 1579 3010 210
AO 0600 5300 0000 1579 3010 307
AO06005100009261796010121
AO 06004000002918140610185
AO 06 0006 0000 11198388311 13
AO 06 005500000037920810184
AO 060 006 00000 94 06 43 93 01 52
AO 06 0051 0000 9892 4734 10123
AO 06004000005632752810136
AO 06000600000. 940643930152
AO 06000100000000000100067
AO.0600.0600.0035.5695.8730.174
AO.0600.0600.0035.5695.8731.144
AO.06005200000366503415193
AO. 06000500000.402782915144
AO 0600 5100 0020 5763 4910 107
AO 06003400000500344180389
AO 0600 5100 00000 358 56 35170
AO 0600 5100 00000 358 56 15188
AO 0600 5100 00000 358 56 35267
AO 0600 4000 000 939 6859 15150
AO 0600 4000 000 939 6859 10106
AO 0600 3400 000 5000 047 47804
AO 0600 3400 000 5000 414 08954
AO 0600 0400 0000 233 362 15132
AO 0600 0400 0000 233 362 10282
AO 0600 10000 1000 17439 00526
AO 0600 10000 1000 17439 01108
AO 0600 0500 00 131 099 39 15144
AO 0600 0500 00 131 099 39 10197
AO 06000 6000 000 114 658 30259
AO 06000 6000 000 11 4 658 31617

25
lib/php-iban/utils/example-ibans/at-ibans

@ -0,0 +1,25 @@
IBAN AT 73 11000 04443 171600
AT 02 6000 0000 9202 5567
AT 64 5400 0003 0026 2623
AT06 2040 4012 0012 3331
AT575400000000777771
AT632031700200200665
AT 922 011 100 002 551 063
AT 92 3501 2000 0101 2343
AT 19 20404 00600 265009
AT97 3200 0000 0051 8548
AT 15 1200 0106 1008 31 00
AT 30 36218 00000120170
AT 87 3200 0000 1207 7830
AT 56 3313 5003 0104 9196
AT 602011100002305453
AT 60 2011 1283 1261 7201
AT 60 3219 5000 0050 9315
AT 661636000136143263
AT 08 20604 009 000 01579
AT 781816041470031000
AT 17 2040 4006 0026 2717
AT 06 3400 0000 0262 1100
AT 93 12000 500 9484 0004
AT 563 225 000 000 705 343
AT 34 20111 30000011821

4
lib/php-iban/utils/example-ibans/az-ibans

@ -0,0 +1,4 @@
AZ 27 CTRE 00000000000002577701
AZ 95 CTRE 00000000000002077703
AZ 16JBBK00003801000000449914
AZ 72 AZER 0002 4000 8924 AZN4 1010

57
lib/php-iban/utils/example-ibans/ba-ibans

@ -0,0 +1,57 @@
BA 393060203790043809
BA 39 338 690 223 178 6494
BA 391611200000517058
BA 39 1611350000455698
BA 391401011200071132
BA 39 1606100000025329
BA 39 338 690 481 206 3318
BA 391010000000001687
BA 391010000000001687
BA 393380604811081508
BA 395 6200 7812388 9056
BA 391010000000001687
BA 391862411200026334
BA 391862411200026431
BA 391340100000001672
BA; 393384304822703378
BA 393060123788314594
BA 393383204890751455
BA 39 3381 8048 5564 8389
BA 391 322 61 01 867 06 449
BA 391994520075608096
BA 393381304846769616
BA 391010000000001687
BA 393389002205504530
BA 393380604893778179
BA 39 3381 3028 3846 7066
BA 393383004890302258
BA 3914 0102 1200 2892 36
BA 39 3384 4028 1685 4244
BA 39 1990496065531685
Ba 393386902853445817
BA 39 3383207700006576
BA 393383204892682434
BA 39-16 11 20 00 00 71 14 46
BA 393380002210019263
BA 391321010086184459
BA 39 1541602002096623
BA 39 3381 3028 3846 7066
BA 39 1401010022091880
BA 39 3386 9048 3604 6471
BA 393 060 092 511 198 288
BA 393 060 092 511 057 929
BA 391549212001479953
BA 391941111768001243
BA 39 1540012000051021
BA393060203740529674
BA 391321610228083110
BA 390000030000000145
BA 391610000094000092
Ba 393386902853445817
BA 39 33858028 4202 4316
BA 395550000021321006
BA 391602000023791504
BA 393386302809360414
BA 3913200-10578360472
BA 393389002208310352
BA 3913210100 867 24943

12
lib/php-iban/utils/example-ibans/be-ibans

@ -0,0 +1,12 @@
BE37 3101 1557 9428
BE57800228915735
BE72 0682 2835 6316
BE09 3631 0770 0857
BE15 3631 5154 2130
BE66 2300 3095 5043
BE79 7330 3511 4333
BE 05 0013 6299 3375
BE 12 7340 2513 1392
BE59 65283724 9926
BE37301017561428
BE28 3100 1476 6520

13
lib/php-iban/utils/example-ibans/bg-ibans

@ -0,0 +1,13 @@
BG09STSA93000021741508
BG44UNCR70001520862375
BG91UNCR70001506849491
BG28BPBI79401048258601
bg24stsa93003100040700
bg67uncr70001520986509
BG32RZBB91551060533767
BG64UNCR96601010526904
BG25RZBB91551000646190
BG64UNCR96601010526904
bg94iort80948400294000
BG88TTBB94001526783652
BG28BNPA94401421040710

3
lib/php-iban/utils/example-ibans/bh-ibans

@ -0,0 +1,3 @@
BH39SBIN02630111120001
BH82SBIN02630111120003
BH12SBIN02630111120002

37
lib/php-iban/utils/example-ibans/by-ibans

@ -0,0 +1,37 @@
BY51BELB30120118150790226000
BY 07 ABLT 3012 0192793350010001
BY 21 MTBK 3012 0001093300062 646
BY46OLMP30126000005480000933
BY07BPSB30120117400149330000
BY89AKBB36025020003480000000
BY 25 PJCB 30120509311000000933
BY 58 PJCB 3012 0377151000000 933
BY14 AKBB 3632 5180 0034 2420 0000
BY 89BPSB30121062180159330000
BY28 BELB 3012 1064 5100 3022 6000
BY 29 AKBB 3013 4281 6000 1540 0000
BY38AKBB30135943430471000000
BY 93 BPSB 3 012 104 977 042 933 0000
BY44 AKBB 3632 0000 0003 0560 0000
BY 65 AKBB 3015 7665 9001 9200 0000
BY89SOMA30120008230101000933
BY 76MTBK30120001093300077564
BY72AKBB30121002800115500000
BY19AKBB30120000023964000000
BY53AKBB36006191211090000000
BY 43BAPB30153255300100000000
BY 58 UNBS 3013 0006 0200 8001 3933
BY 65 ALFA 3013 2124090080270 000
BY14BPSB30125555550009330000
BY70AKBB 3013 0000000 1742 00000
BY24AKBB 3013 0000000 3342 00000
BY11BPSB30131725050129330000
BY66BLBB30120700008710001001
BY84ALFA30122305700080270000
BY73AKBB31320416100673200000
BY59BPSB30131031290189330000
BY50BAPB30122907300100000000
BY03 AKBB 3642 9030 0155 8230 0000
BY65SLAN30123407350100200000
BY08BLBB30120100027309001001
BY96MMBN66300010000000000000

3
lib/php-iban/utils/example-ibans/cf-ibans

@ -0,0 +1,3 @@
CF4220001000010120069700160
CF4220002002003712551080145
CF4220001004113717538890110

4
lib/php-iban/utils/example-ibans/cg-ibans

@ -0,0 +1,4 @@
CG3930013020003710721836132
CG3930011000101013451300019
CG 39 30013 02000 37107049649/22
CG 39 30014 00001 0120368360135

15
lib/php-iban/utils/example-ibans/ch-ibans

@ -0,0 +1,15 @@
CH070023023009416905E
CH18 0838 7000 0010 80 206
CH75 0483 5041 2027 1100 0
CH57 0483 5041 2027 1200 3
CH15 0023 5235 5161 9601 X
CH86 0023 5235 5161 9602 D
CH66 0076 7000 U520 5842 3
CH44 00767 000T 5341 2535
CH60 0070 0110 0023 2850 1
CH91 0070 0130 0073 0598 2
CH69 0070 0130 0073 0599 0
CH57 0024 0240 8219 7329V
CH77 0900 0000 4034 5852 3
CH 30 0070 0070 0000 3576 9
CH8600763000115724145

16
lib/php-iban/utils/example-ibans/cr-ibans

@ -0,0 +1,16 @@
CR05015202001026284066
CR91010200009396512462
CR760 102 0000 9331 2424 02
CR29016101002710209512
CR61015100010010599557
CR80015100010020665002
CR94015201001005314800
CR29016101002710209512
CR71015100010012159331
CR34015100410026001877
CR22015100010012209974
CR94015100010026223044
CR62010200009019020800
CR91015120210020003612
CR85015100010012137157
CR76015100010026174771

9
lib/php-iban/utils/example-ibans/cz-ibans

@ -0,0 +1,9 @@
CZ06 3500 0000 0010 0047 2301
CZ12 3500 0000 0013 3047 2304
CZ10 3500 0000 0012 2047 2303
CZ3855000000005041018525
CZ35 0300 0000 0002 2514 9068
CZ8427000000002112049123
CZ56 0600 0000 0002 1193 3046
CZ12 0600 0000 0002 1193 3062
CZ9101000000000021645051

21
lib/php-iban/utils/example-ibans/de-ibans

@ -0,0 +1,21 @@
DE50512305000018102010
DE26501108006231602308
DE 30 50021000 0010116606
DE 63 690 400 45 0272181900
DE58 7102 0072 0009 3041 50
DE83100708480513128903
DE45100708480513128908
DE72100708480513128907
DE67100708480513128900
DE35100708480512158700
DE51100708480512158703
DE52 3244 00230580202000
DE90 5241 0900 1007 0690 06
DE08600700700051438000
DE92 7601 0085 0314 1538 56
DE 65203205004989143859
DE17100400000518335500
DE40 5007 0010 0953 4496 10
DE85503300000710110026
DE13503300000021011100
DE97 5123 0500 0018 0156 10

2
lib/php-iban/utils/example-ibans/dj-ibans

@ -0,0 +1,2 @@
DJ2110002010010409943020008
DJ21 1000 2010 0110 7609 3000 007

13
lib/php-iban/utils/example-ibans/dk-ibans

@ -0,0 +1,13 @@
DK1820005000015611
DK7752950010016924
DK8352950013002088
DK7752950015002239
DK5102164069061125
DK02 3000 0011 2810 52
DK02 3000 0011 2810 52
DK8176210003001134
DK2576810000607861
DK8520000747431973
DK 2330000002630699
DK8730002138818740
DK2430003007515596

26
lib/php-iban/utils/example-ibans/ee-ibans

@ -0,0 +1,26 @@
EE752200221001121961
EE063300332019340005
EE481700017000107462
EE251700017000107488
EE531700017000137539
EE201700017000305264
EE381700017000380988
EE821700017000411624
EE461700017000463779
EE571700017000539629
EE841700017000540016
EE331700017000548597
EE341700017000602996
EE481700017000631844
EE251700017000659127
EE781700017000659143
EE621700017001136380
EE791700017002848318
EE351700017003391534
EE654204207004188303
EE191010220028966019
EE302200221026463536
EE441010220117273011
EE512200221056408707
EE25 1010 0020 0642 8001
EE362200221046082939

1
lib/php-iban/utils/example-ibans/eg-ibans

@ -0,0 +1 @@
EG380019000500000000263180002

37
lib/php-iban/utils/example-ibans/es-ibans

@ -0,0 +1,37 @@
ES1201820061770080107287
ES09 2038-0626-0160-0002-5280
ES 58 0075 0204 9406 0081 1004
ES17 2100 2050 61 0200003745
ES94 2095 5381 1910 6117 3539
ES39 2095 0292 9132 3900 0567
ES65 0081 1763 11 0001002404
ES53 0030 4290 7700 0171 1271
ES-94 2100 0424 34 0200114567
ES59 0081 0264 4600 01350839
ES49-2100-0927-5602-0001-7660
ES1320133074610211236492
ES40-0049-2584-9022-14002210
ES31-2080-5155-9730-4000-0250
ES97 0182 3999 3702 0066 4662
ES37 0049-1500-03-2810355229
ES97 0182 3999 3702 0066 4662
ES92 0128 0033 7805 0000 0751
ES85 0049 6015 13 2710068066
ES6720310000010118272402
ES9521000549410200294293
ES2800810312250001194826
ES29 0182 0903 59 0200081438
ES50 0487 0045 37 2080000078
ES74 0075 0078 0006 0146 8903
ES22 0049 4306 6221 9008 4227
ES30.2096.0187.1331.7730.2704
ES10 3058 0357 3627 2090 2337
ES38 2100 2225 4702 0020 1137
ES98 – 3190 – 0974 – 34 - 4255071823
ES71 1465 0100 9819 0030 4942
ES06 0182 3344 2602 0160 0719
ES42-0081-0093-40-0001532358
ES62 2100 0196 2302 0046 4351
ES81-0049-1810-9627-1040-6241
ES7300496742512716208582
ES21 2038 9659 2760 0004 0359

22
lib/php-iban/utils/example-ibans/fi-ibans

@ -0,0 +1,22 @@
FI 24 8000 1670 5221 10
IBAN FI 2316603000077720
FI 54 800015 000 69290
FI32 157230 000 30072
FI 38 5072 0540 0320 69
FI 60 1443 3000 1131 98
FI 98 5381 1720 0190 05
FI 91 8000 2430 6462 72
FI 1410973000115945
FI 88 4055 1020 1701 83
FI 738 000 15 711 55 010
FI98 4055 00100133 61
FI 11 51050610 001888
FI 73 1528 3000 135280
FI 76 4006 2220 0144 94
FI 2140 5524 2002 9508
FI 8781 3007 1015 9704
FI 39 5670 0820 1352 57
FI 5222051800005099
FI73 5700 8120 2291 12
FI 83 519407 2011 1892
FI 42 1366 3000 1266 07

89
lib/php-iban/utils/example-ibans/fr-ibans

@ -0,0 +1,89 @@
FR1420041010050500013M02606
FR76 3043 8000 0837 6490 3000 526
FR76 30003 00119 00020212266 43
FR7630027175330002005370159
FR76 1832 9000 0110 1111 2000 191
FR.98.20041.01016.0994845V037.34
FR 23 2004 1000 0127 4847 3B02 035
FR 7630 0040 2569 0000 0294 37103
FR 76 1007 1750 0000 0010 0035 291
FR 76 3006 6109 4000 0100 3080 193
FR 76 1189 9001 0000 0200 3124 583
FR 76 1670 5090 1708 7710 2614 840
FR 10 2004 1000 0102 8489 4Y02 027
FR 76 3000 4015 8700 0260 1178 980
FR 76 30003 02360 00150017186 72
FR76 3006 6108 7300 01024260 178
FR 23 2004 1000 0125 7091 0Y02 053
FR 76 1213 5003 0008 8018 5921 644
FR 76 3000 4004 7800 0013 1404 410
FR 57 2004 1000 0123 2068 7S02 079
FR 76 10071760 00 00 0010 00 38 624
FR 76 1751 5006 0008 2751 2334 879
FR 76 3007 6023 5210 7618 0020 033
FR 76 3000 3032 8000 0500 6152 856
FR 75 3004 1000 0104 4244 5Z02 067
FR76 1009 6185 6500 0257 2210 186
FR 76 1680 6001 0039 3268 9620 081
FR 12 3000 2085 7100 0006 0353 S04
FR 76 3000 4015 8700 0260 1178 980
FR 76 1054 8000 6000 0476 0051 673
FR 76 1009 6185 0600 0640 9780 167
FR 40 3000 2056 5600 0046 6276 T57
FR 45 2004 1000 0115 37 359Y02097
FR 76 1548 9003 8000 0357 5450 136
FR 76 3000 4008 0400 0102 1901 036
FR 76 1910 6006 8000 9631 2601 895
FR 17 3000 1004 9700 00Q0 5050 089
FR 76 1007 1250 0000 0010 0257 708
FR 89 3000 2083 4300 0007 1547 D17
FR 76 3000 3002 7800 0270 0475 779
FR 76 3000 3039 4100 0372 6061 586
FR 76 / 1213 / 5003 / 0008 / 0013 / 0194 / 760
FR 76 3006 6109 4000 0100 3080 193
FR 40 3000 2056 5600 0046 6276 T57
FR 6820041010090469926K03088
FR 40 3000 2056 5600 0046 6276 T57
FR 76 1450 6000 0407 8843 0306 021
FR 76 1460 7000 5166 0210 9766 627
FR 76 30003 03300 00037260771 18
FR 12 3000 2006 8400 0000 5616 A66
FR 76 1870 6000 0017 6105 0800 016
FR 76 1450 6005 4472. 8200 4676 641
FR 76 1009 6181 0200 0242. 0040 136
IBAN: FR 26 4097 8000 4801 2567 0B00 101
FR 76 30003 00990 00037268733 15
FR 76 1910 6000 0143 6478 0491 968
FR 76 3006 6109 4000 0100 3080 193
FR 76 1007 1780 0000 0010 0395 848
FR 05 20041 01007 0006761X038 53
FR 76-1007-1490-0000-0010-0020-607
FR 76 1213 5003 0008 8018 5921 644
FR 45 2004 1000 0115 37 359Y02097
FR 23 2004 1000 0114 69184V02 032
FR 76 1350 7001 6130 1074 6211 303
FR 76 3000 3018 4100 0372 6064 956
FR 76 4255 9000 1521 0297 8460 138
FR 76 3000 4008 9200 0104 4351 821
FR 76 3000 4008 4900 0100 1185 914
FR 76 1007 1590 0000 0010 1131 413
FR 30 3000 1008 39C3 7800 0000 051
FR 96 20041 01010 0044826B031 51
FR 76 3000 3034 5000 0506 2190 310
FR 76 1007 19 10 0000 0010 0177471
FR 02 20041 00001 5192606T020 73
FR-76-1007-1490-0000-0010-0020-607
FR 7630003021900002015008627
FR.98.20041.01016.0994845V037.34
FR 76 1007 1740 0000 0020 0024 505
FR 75 3000 1008 33C3 1800 0000 047
FR 76 1007 1750 0000 0010 0035 776
FR 76 30003 01100 00020884475 75
FR 75 3000 1008 33C3 1400 0000 086
FR 76 3005 6000 6600 6626 3664 091
FR 76 3000 4001 7800 0101 0481 692
Fr 76 30004 01692 000202 4109 661
FR 76 1440 6001 8019 1329 1016 563
FR 76 3000 1000 6400 0000. 9018 227
FR 76 1007 1750 0000 0010 0001 244
FR 76 3000 4008 5900. 0100 2278663

3
lib/php-iban/utils/example-ibans/ga-ibans

@ -0,0 +1,3 @@
GA2142001007341520000106963
GA2140021010032001890020126
GA2140002000055602673300064

31
lib/php-iban/utils/example-ibans/gb-ibans

@ -0,0 +1,31 @@
GB76 BARC 2032 5333 6065 46
GB28BARC20325364442255
GB60 BARC 20371680886513
GB84 BARC 20371666485655
GB07 BARC 20371649487888
GB97CITI 0832 0012 0010 47
GB63MIDL40052011741942
GB78CITI18500812000717
GB25CITI08320011963155
GB06CITI18500812000849
GB43NDEA40487845673101
gb37 midl 4002 5041 2614 95
GB15BKEN10000023031123
GB37BKEN10000023031018
GB03BKEN10000052055000
GB62 LOYD 3015 9900567301
GB84 LOYD 3096 3486 3952 56
GB24 LOYD 3096 3411 6621 04
GB05NWBK56000313270222
GB55NWBK60730101286498
GB58NWBK60721106570631
GB24NWBK60730123785624
GB90 BARC 2005 0600 9813 03
GB76NWBK55502306703844
GB21 CITI 1850 0813 359549
GB72NWBK55502359606843
GB23NWBK55502359694831
GB81NWBK55502359655666
GB33SCBL60910412697823
GB98 LOYD 3096 3401 0175 44
GB32 LOYD 3096 3486 1615 49

1
lib/php-iban/utils/example-ibans/gq-ibans

@ -0,0 +1 @@
GQ7050002001003715228190196

2
lib/php-iban/utils/example-ibans/gr-ibans

@ -0,0 +1,2 @@
GR91 0172 5240 0055 2405 2435 991
GR68 0172 5240 0055 2405 2436 017

1
lib/php-iban/utils/example-ibans/gw-ibans

@ -0,0 +1 @@
GW04GW1430010181800637601

1
lib/php-iban/utils/example-ibans/hn-ibans

@ -0,0 +1 @@
HN54PISA00000000000000123124

9
lib/php-iban/utils/example-ibans/hr-ibans

@ -0,0 +1,9 @@
HR9423400091110140839
HR39 2503 0071 1000 2063 6
HR72 2481 0001 1200 1687 7
HR46 2360 0001 1013 8681 8
HR3525000091101256823
HR4124020061100054853
HR8223600001101301489
HR6824840081105429943
HR 5223600001101690029

6
lib/php-iban/utils/example-ibans/hu-ibans

@ -0,0 +1,6 @@
HU69 1070 0024 6667 6548 5110 0005
HU07 1310 0007 0210 3880 0003 3484
HU07 1310 0007 0210 3880 0003 9789
HU17 1091 8001 0000 0068 7383 0003
HU22 1091 8001 0000 0068 7383 0010
HU48 1091 8001 0000 0068 7383 0027

1
lib/php-iban/utils/example-ibans/ie-ibans

@ -0,0 +1 @@
IE64 ULSB 9850 3024 0620 99

1
lib/php-iban/utils/example-ibans/iq-ibans

@ -0,0 +1 @@
IQ98 NBIQ 8501 2345 6789 012

12
lib/php-iban/utils/example-ibans/ir-ibans

@ -0,0 +1,12 @@
IR800180000000000829264358
IR19 0540 2011 8002 0043 8310 08
IR21 0690 1016 0100 0192 8730 01
IR170120000000001469577435
IR410550310200103088402001
IR290150000000695301364302
IR760120010000000223421288
IR150550310180000210044001
IR290120000000000096271783
IR470120000000001186587834
IR 150120 0000 0000 5637 7655 38
IR 390 5700 228 80000 979726 001

6
lib/php-iban/utils/example-ibans/it-ibans

@ -0,0 +1,6 @@
IT18T0538703601000000198036
IT57V0538703601000000198060
IT40Z0538703601000000198072
IT29P0538742530000000802006
IT94I0306940101100100003599
IT63 M033 5901 6001 0000 0131 525

1
lib/php-iban/utils/example-ibans/km-ibans

@ -0,0 +1 @@
KM4600005000010010904400137

14
lib/php-iban/utils/example-ibans/lt-ibans

@ -0,0 +1,14 @@
LT16 7300 0100 0000 0447
LT31 7044 0600 0614 9728
LT36 7300 0101 0370 4242
LT217300010082139763
LT957044060005610711
LT187300010072788629
LT 82 7400 0342 4122 3810
LT78 7300 0101 3111 5298
LT 57 7400 0342 4172 3810
LT85 7300 0101 3111 5366
LT537300010141453717
LT55 7300 0100 0000 0036
LT16 7300 0100 0000 0447
LT987044060007701395

11
lib/php-iban/utils/example-ibans/lu-ibans

@ -0,0 +1,11 @@
LU300030186828400000
LU060019100068283000
LU110029156516469200
LU110080408107001003
LU040090000002358000
LU980141510010000000
LU280019400644750000
LU510019415598974000
LU311111007733700000
LU400141239257000000
LU68 0019 2955 7684 8000

7
lib/php-iban/utils/example-ibans/lv-ibans

@ -0,0 +1,7 @@
LV59HABA0551018547392
LV42RIKO0002930061762
LV03RIKO0002030086376
LV63 NDEA 0000 0818 2900 6
LV90 NDEA 0000 0822 2010 9
LV29 NDEA 0000 0818 1904 5
LV89 NDEA 0000 0818 1903 2

1
lib/php-iban/utils/example-ibans/ma-ibans

@ -0,0 +1 @@
MA64011519000001205000534921

13
lib/php-iban/utils/example-ibans/mc-ibans

@ -0,0 +1,13 @@
MC 78 1273 9000 7001 2417 2000 L37
MC 58 1009 6185 7900 0458 7420 187
MC 23 1450 8000 0151 0479 3001 D18
MC 581756 900001 701251 0000297
MC 58 30003 01504 00027002272 08
MC 31 1273 9000 7001 0428 7000 c37
MC 58 1756 9000 0159 2780 0000 160
MC 62 1273 9000 7001 1223 5000K08
MC 83 1273 9000 7301 0499 5000 U79
MC 31 1273 9000 7001 2377 9000 Y60
MC 49 1273 9000 7000 1337 5000 L76
MC 12 1273 9000 7001 1224 1000 Y22
MC 79 1273 9000 7201 1612 7000 M36

5
lib/php-iban/utils/example-ibans/me-ibans

@ -0,0 +1,5 @@
ME25530005010000786772
ME 2555 5200 2021 2006 7050
ME 25550005080000004970
ME 25525007010044076639
ME 25520036000001482278

45
lib/php-iban/utils/example-ibans/mk-ibans

@ -0,0 +1,45 @@
M.K 07300701000819229
MK 07 1007 0100 0084 754
MK 07 1007 0100 00 73114
MK 07 1007 0100 0067 876
MK 07 1007 0100 0078 449
MK 07 210 3 00000 2849 48
MK 07 210 3000003122 05
MK 07 210-3000003939-76
MK 07 300701001678455
MK 07 320 1400215737 69
MK 07 380-2-730 408-012-50
MK 07-210-7220000021-04
MK 07100701000066130