{"id":16365960,"url":"https://github.com/marcwrobel/jbanking","last_synced_at":"2025-04-13T11:48:19.443Z","repository":{"id":38862906,"uuid":"10169777","full_name":"marcwrobel/jbanking","owner":"marcwrobel","description":"A Java banking API","archived":false,"fork":false,"pushed_at":"2025-03-28T20:37:20.000Z","size":1021,"stargazers_count":112,"open_issues_count":17,"forks_count":57,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-06T09:30:14.153Z","etag":null,"topics":["banking","business-calendar","countries","creditor-identifier","currencies","eea","efta","eu","fed","iso-13616","iso-3166-1","iso-4217","iso-9362","java","nyse","sepa","target"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcwrobel.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-05-20T09:29:52.000Z","updated_at":"2025-03-28T20:37:22.000Z","dependencies_parsed_at":"2023-02-16T08:55:24.769Z","dependency_job_id":"8a57736f-4cb8-4792-8fbb-3aa5bf2579d7","html_url":"https://github.com/marcwrobel/jbanking","commit_stats":{"total_commits":427,"total_committers":6,"mean_commits":71.16666666666667,"dds":0.3044496487119438,"last_synced_commit":"4c881384d81e166ccac0ab631b51385eb2ce2431"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcwrobel%2Fjbanking","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcwrobel%2Fjbanking/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcwrobel%2Fjbanking/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcwrobel%2Fjbanking/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcwrobel","download_url":"https://codeload.github.com/marcwrobel/jbanking/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248710410,"owners_count":21149186,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["banking","business-calendar","countries","creditor-identifier","currencies","eea","efta","eu","fed","iso-13616","iso-3166-1","iso-4217","iso-9362","java","nyse","sepa","target"],"created_at":"2024-10-11T02:44:54.241Z","updated_at":"2025-04-13T11:48:19.420Z","avatar_url":"https://github.com/marcwrobel.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Open in Gitpod](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/marcwrobel/jbanking/)\n[![Build](https://github.com/marcwrobel/jbanking/workflows/build/badge.svg)](https://github.com/marcwrobel/jbanking/actions)\n[![Supported JVM Versions](https://img.shields.io/badge/JVM-8--21-brightgreen.svg?logo=openjdk)](https://github.com/marcwrobel/jbanking/actions/workflows/build.yml)\n[![Sonarcloud Status](https://sonarcloud.io/api/project_badges/measure?project=fr.marcwrobel:jbanking\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=fr.marcwrobel:jbanking)\n[![SonarCloud Coverage](https://sonarcloud.io/api/project_badges/measure?project=fr.marcwrobel:jbanking\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=fr.marcwrobel:jbanking)\n[![SonarCloud Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=fr.marcwrobel:jbanking\u0026metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=fr.marcwrobel:jbanking)\n[![SonarCloud Bugs](https://sonarcloud.io/api/project_badges/measure?project=fr.marcwrobel:jbanking\u0026metric=bugs)](https://sonarcloud.io/dashboard?id=fr.marcwrobel:jbanking)\n[![Maven Central](https://img.shields.io/maven-central/v/fr.marcwrobel/jbanking.svg?logo=apache-maven\u0026label=Maven%20Central)](https://central.sonatype.com/artifact/fr.marcwrobel/jbanking)\n[![javadoc](https://javadoc.io/badge2/fr.marcwrobel/jbanking/javadoc.svg)](https://javadoc.io/doc/fr.marcwrobel/jbanking)\n[![Reproducible Builds](https://img.shields.io/badge/Reproducible_Builds-ok-success)](https://github.com/jvm-repo-rebuild/reproducible-central#fr.marcwrobel:jbanking)\n[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/6217/badge)](https://bestpractices.coreinfrastructure.org/projects/6217)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/marcwrobel/jbanking/badge)](https://deps.dev/maven/fr.marcwrobel%3Ajbanking)\n\n# jbanking - A Java banking API\n\njbanking is a library of utilities to assist with developing banking functionalities. jbanking is focused on, but not\nlimited to, European banking.\n\n## Features\n\njbanking is supporting the following features :\n\n* [ISO 3166-1 countries](https://wikipedia.org/wiki/ISO_3166-1) with alpha-2 code, alpha-3 code, numeric code and\n  status, e.g. independent or dependent (according to the\n  [International Organization for Standardization](https://www.iso.org)).\n* Countries or territories participation to economic agreements :\n  * [European Economic Area (EEA)](https://wikipedia.org/wiki/European_Economic_Area),\n  * [European Free Trade Association (EFTA)](https://wikipedia.org/wiki/European_Free_Trade_Association),\n  * [European Union (EU)](https://en.wikipedia.org/wiki/European_Union),\n  * [SEPA COM Pacifique](https://www.cfonb.org/Default.aspx?lid=1\u0026rid=122\u0026rvid=239),\n  * [Single Euro Payments Area (SEPA)](https://wikipedia.org/wiki/Single_Euro_Payments_Area).\n* [ISO 4217 currencies](https://wikipedia.org/wiki/ISO_4217) (with alphabetic code, numeric code, minor unit and\n  countries using it).\n* [ISO 9362 BIC](https://wikipedia.org/wiki/Bank_Identifier_Code) handling and validation.\n* [ISO 13616 IBAN](https://wikipedia.org/wiki/International_Bank_Account_Number) handling and validation (for both\n  check digit and national bank account number structure).\n* Random [ISO 9362 BIC](https://wikipedia.org/wiki/Bank_Identifier_Code) and\n  [ISO 13616 IBAN](https://wikipedia.org/wiki/International_Bank_Account_Number) generation.\n* [Creditor Identifiers (CIs)](https://www.europeanpaymentscouncil.eu/document-library/guidance-documents/creditor-identifier-overview)\n  handling and validation.\n* Configurable [holiday](https://wikipedia.org/wiki/Holiday) calendar support with predefined calendars for :\n  * Frankfurt, London, Paris, Sydney, and Tokyo financial districts,\n  * Federal Reserve Bank of New York (FED),\n  * New York Stock Exchange (NYSE),\n  * European Union TARGET system.\n\n## Requirements\n\njbanking requires at least [Java 8](https://adoptium.net/) (build is tested against Java 8, 11, 17 and 21). It has no\nadditional dependency !\n\n## Use it !\n\nYou can download the latest build on [Maven Central](https://search.maven.org/artifact/fr.marcwrobel/jbanking) or use it\nas a maven dependency:\n\n```xml\n\n\u003cdependency\u003e\n  \u003cgroupId\u003efr.marcwrobel\u003c/groupId\u003e\n  \u003cartifactId\u003ejbanking\u003c/artifactId\u003e\n  \u003cversion\u003e4.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nThen you just have to use the jbanking API.\n\n```java\n// Get ISO country information\nIsoCountry country = IsoCountry.fromAlpha2Code(\" fr \").get();\nAssertion.assertEquals(\"FRA\", country.getAlpha3Code());\nAssertion.assertEquals(250, country.getNumericCode());\nAssertion.assertTrue(country.isIndependent());\nAssertion.assertTrue(country.isParticipatingTo(EUROPEAN_ECONOMIC_AREA));\n\n// Get ISO currency information\nIsoCurrency currency = IsoCurrency.fromAlphabeticCode(\" eur \").get();\nAssertion.assertEquals(978, currency.getNumericCode());\nAssertion.assertEquals(2, currency.getMinorUnit().get());\nAssertion.assertEquals(NATIONAL, currency.getCategory());\nAssertion.assertTrue(currency.getCountries().contains(FR));\n\n// Validate an IBAN\nAssertions.assertTrue(Iban.isValid(\" fr2531682128768051490609537 \"));\n\n// Get IBAN information\nIban iban = new Iban(\" fr2531682128768051490609537 \");\nAssertions.assertEquals(\"FR2531682128768051490609537\", iban.toString());\nAssertions.assertEquals(\"FR25 3168 2128 7680 5149 0609 537\", iban.toPrintableString());\nAssertions.assertEquals(\"FR\", iban.getCountryCode());\nAssertions.assertEquals(\"25\", iban.getCheckDigit());\nAssertions.assertEquals(\"31682128768051490609537\", iban.getBban());\nAssertions.assertEquals(\"31682\", iban.getBankIdentifier());\nAssertions.assertEquals(\"12876\", iban.getBranchIdentifier().get());\nAssertions.assertEquals(\"80514906095\", iban.getAccountNumber());\nAssertions.assertEquals(\"37\", iban.getNationalCheckDigit().get());\n\n// Generate a random IBAN\nIban randomIban = new RandomIban().next();\n\n// Validate a BIC\nAssertions.assertTrue(Bic.isValid(\" psstfrppxxx \"));\n\n// Get BIC information\nBic bic = new Bic(\" psstfrppxxx \");\nAssertions.assertEquals(\"PSSTFRPPXXX\", bic.toString());\nAssertions.assertEquals(\"PSST\", bic.getInstitutionCode());\nAssertions.assertEquals(\"FR\", bic.getCountryCode());\nAssertions.assertEquals(\"PP\", bic.getLocationCode());\nAssertions.assertEquals(\"XXX\", bic.getBranchCode());\nAssertions.assertTrue(bic.isLiveBic());\n\n// Generate a random BIC\nBic randomBic = new RandomBic().next();\n\n// Validate a creditor identifier\nAssertions.assertTrue(CreditorIdentifier.isValid(\" fr72zzz123456 \"));\n\n// Get creditor identifier information\nCreditorIdentifier ci = new CreditorIdentifier(\" fr72zzz123456 \");\nAssertions.assertEquals(\"FR72ZZZ123456\", ci.toString());\nAssertions.assertEquals(\"FR\", ci.getCountryCode());\nAssertions.assertEquals(\"72\", ci.getCheckDigit());\nAssertions.assertEquals(\"ZZZ\", ci.getBusinessCode());\nAssertions.assertEquals(\"123456\", ci.getNationalIdentifier());\n\n// Using predefined calendars\nCalendar calendar = FinancialCalendars.PARIS;\nAssertion.assertTrue(calendar.isHoliday(LocalDate.of(2022, 1, 1)));\nAssertion.assertFalse(calendar.isBusinessDay(LocalDate.of(2022, 1, 1)));\nAssertion.assertEquals(LocalDate.of(2022, 1, 3), calendar.next(LocalDate.of(2022, 1, 1)));\nAssertion.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)));\n```\n\nFor more information take a look at [the javadoc](https://javadoc.io/doc/fr.marcwrobel/jbanking) and\n[the unit tests](/src/test/java/fr/marcwrobel/jbanking). Changelogs are available on\n[GitHub Releases](https://github.com/marcwrobel/jbanking/releases).\n\n## Alternatives\n\nThere is no alternatives to jbanking that has all its features. But here are some _partial_ alternatives :\n\n- Java itself for [ISO 3166 countries](https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html)\n  and [ISO 4217 currencies](https://docs.oracle.com/javase/8/docs/api/java/util/Currency.html).\n- [OpenGamma Strata](https://github.com/OpenGamma/Strata), an open source analytics and market risk library from\n  OpenGamma (especially [strata-basics](https://github.com/OpenGamma/Strata/tree/main/modules/basics)).\n- [TakahikoKawasaki/nv-i18n](https://github.com/TakahikoKawasaki/nv-i18n), a package to support internationalization,\n  containing ISO 3166-1 country code enum, ISO 639-1 language code enum, etc.\n- [arturmkrtchyan/iban4j](https://github.com/arturmkrtchyan/iban4j) (or its fork\n  [NaluKit/iban4g](https://github.com/NaluKit/iban4g)), a java library for generating and validating IBANs and BICs.\n- [Apache Commons Validator](https://commons.apache.org/proper/commons-validator/), a java library for validating a lot\n  of things, including IBANs.\n\n## Contribute\n\nTake a look at the [contribution guide](CONTRIBUTING.md).\n\n## Need help ?\n\nStart a [discussion](https://github.com/marcwrobel/jbanking/discussions),\nraise an [issue](https://github.com/marcwrobel/jbanking/issues?sort=created\u0026direction=desc\u0026state=open)\nor contribute with [a pull-request](https://github.com/marcwrobel/jbanking/pulls) (please take a look at the\n[contribution guide](CONTRIBUTING.md) before).\n\nAnd for the things that must be kept private (**only** !), such as [security issues](/SECURITY.md), email me at\n[marc.wrobel@gmail.com](mailto:marc.wrobel@gmail.com).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcwrobel%2Fjbanking","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcwrobel%2Fjbanking","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcwrobel%2Fjbanking/lists"}