jbanking is a library of utilities to assist with developing banking functionalities. jbanking is focused on, but not limited to, European banking.
jbanking is supporting the following features :
- ISO 3166-1 countries with alpha-2 code, alpha-3 code, numeric code and status, e.g. independent or dependent (according to the International Organization for Standardization).
- Countries or territories participation to economic agreements :
- ISO 4217 currencies (with alphabetic code, numeric code, minor unit and countries using it).
- ISO 9362:2009 BIC handling and validation.
- ISO 13616:2007 IBAN handling and validation (for both check digit and national bank account number structure).
- Creditor Identifiers (CIs) handling and validation.
- Configurable holiday calendar support with predefined calendars for :
- Frankfurt, London, Paris, Sydney, and Tokyo financial districts,
- Federal Reserve Bank of New York (FED),
- New York Stock Exchange (NYSE),
- European Union TARGET system.
jbanking requires at least Java 8 (build is tested against Java 8, 11, 17 and 18). It has no additional dependency !
You can download the latest build on Maven Central or use it as a maven dependency:
<dependency>
<groupId>fr.marcwrobel</groupId>
<artifactId>jbanking</artifactId>
<version>3.4.0</version>
</dependency>
Then you just have to use the jbanking API.
// Get ISO country information
IsoCountry country = IsoCountry.fromAlpha2Code("FR").get();
Assertion.assertEquals("FRA", country.getAlpha3Code());
Assertion.assertEquals(250, country.getNumericCode());
Assertion.assertTrue(country.isIndependent());
Assertion.assertTrue(country.isParticipatingTo(EUROPEAN_ECONOMIC_AREA));
// Get ISO currency information
IsoCurrency currency = IsoCurrency.fromAlphabeticCode("EUR").get();
Assertion.assertEquals(978, currency.getNumericCode());
Assertion.assertEquals(2, currency.getMinorUnit().get());
Assertion.assertEquals(NATIONAL, currency.getCategory());
Assertion.assertTrue(currency.getCountries().contains(FR));
// Validate an IBAN
Assertions.assertTrue(Iban.isValid("FR2531682128768051490609537"));
// Get IBAN information
Iban iban = new Iban("fr2531682128768051490609537");
Assertions.assertEquals("FR2531682128768051490609537", iban.toString());
Assertions.assertEquals("FR", iban.getCountryCode());
Assertions.assertEquals("25", iban.getCheckDigit());
Assertions.assertEquals("31682128768051490609537", iban.getBban());
Assertions.assertEquals("FR25 3168 2128 7680 5149 0609 537", iban.toPrintableString());
// Validate a BIC
Assertions.assertTrue(Bic.isValid("PSSTFRPPXXX"));
// Get BIC information
Bic bic = new Bic("psstfrppxxx");
Assertions.assertEquals("PSSTFRPPXXX", bic.toString());
Assertions.assertEquals("PSST", bic.getInstitutionCode());
Assertions.assertEquals("FR", bic.getCountryCode());
Assertions.assertEquals("PP", bic.getLocationCode());
Assertions.assertEquals("XXX", bic.getBranchCode());
Assertions.assertTrue(bic.isLiveBic());
// Validate a creditor identifier
Assertions.assertTrue(CreditorIdentifier.isValid("FR72ZZZ123456"));
// Get creditor identifier information
CreditorIdentifier ci = new CreditorIdentifier("fr72zzz123456");
Assertions.assertEquals("FR72ZZZ123456", ci.toString());
Assertions.assertEquals("FR", ci.getCountryCode());
Assertions.assertEquals("72", ci.getCheckDigit());
Assertions.assertEquals("ZZZ", ci.getBusinessCode());
Assertions.assertEquals("123456", ci.getNationalIdentifier());
// Using predefined calendars
Calendar calendar = FinancialCalendars.PARIS;
Assertion.assertTrue(calendar.isHoliday(LocalDate.of(2022, 1, 1)));
Assertion.assertFalse(calendar.isBusinessDay(LocalDate.of(2022, 1, 1)));
Assertion.assertEquals(LocalDate.of(2022, 1, 3), calendar.next(LocalDate.of(2022, 1, 1)));
Assertion.assertEquals(Arrays.asList(LocalDate.of(2022, 1, 3), LocalDate.of(2022, 1, 4)), calendar.businessDaysWithin(LocalDate.of(2022, 1, 1), LocalDate.of(2022, 1, 4)));
For more information take a look at the javadoc and the unit tests. Changelogs are available on GitHub Releases.
There is no alternatives to jbanking with all its features. But here are some partial alternatives :
- Java itself for ISO 3166 countries and ISO 4217 currencies.
- OpenGamma Strata, an open source analytics and market risk library from OpenGamma (especially strata-basics).
- TakahikoKawasaki/nv-i18n, a package to support internationalization, containing ISO 3166-1 country code enum, ISO 639-1 language code enum, etc.
- arturmkrtchyan/iban4j (or its fork NaluKit/iban4g), a java library for generating and validating IBANs and BICs.
- Apache Commons Validator, a java library for validating a lot of things, including IBANs.
Take a look at the contribution guide.
Start a discussion, raise an issue or contribute with a pull-request (please take a look at the contribution guide before).
And for the things that must be kept private (only !), such as security issues, email me at marc.wrobel@gmail.com.