From 9af0b12c8f2742f8ecfec38f09f1e6038470c3d2 Mon Sep 17 00:00:00 2001 From: hajk1 Date: Tue, 13 Oct 2020 20:34:27 +0330 Subject: [PATCH 1/4] enable Java 8 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0357d75..22128da 100644 --- a/pom.xml +++ b/pom.xml @@ -57,8 +57,8 @@ UTF-8 - 1.6 - java16 + 1.8 + java18 true From e7bd72e791436a53578e8e74ab2b28c3c3c72fcb Mon Sep 17 00:00:00 2001 From: hajk1 Date: Tue, 13 Oct 2020 20:35:38 +0330 Subject: [PATCH 2/4] checks for national check digit be present in BBAN --- src/main/java/org/iban4j/Iban.java | 17 ++++++++++++----- .../java/org/iban4j/IbanFormatException.java | 3 ++- .../java/org/iban4j/bban/BbanStructure.java | 14 ++++++++++++++ src/test/java/org/iban4j/IbanTest.java | 13 ++++++++++--- 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/iban4j/Iban.java b/src/main/java/org/iban4j/Iban.java index cebed6d..9d7af94 100644 --- a/src/main/java/org/iban4j/Iban.java +++ b/src/main/java/org/iban4j/Iban.java @@ -15,12 +15,12 @@ */ package org.iban4j; -import java.util.List; -import java.util.Random; - import org.iban4j.bban.BbanStructure; import org.iban4j.bban.BbanStructureEntry; +import java.util.List; +import java.util.Random; + import static org.iban4j.IbanFormatException.IbanFormatViolation.*; @@ -351,7 +351,7 @@ public Iban build(boolean validate) throws IbanFormatException, IllegalArgumentException, UnsupportedCountryException { // null checks - require(countryCode, bankCode, accountNumber); + require(countryCode, bankCode, accountNumber, nationalCheckDigit); // iban is formatted with default check digit. final String formattedIban = formatIban(); @@ -439,7 +439,8 @@ private String formatIban() { private void require(final CountryCode countryCode, final String bankCode, - final String accountNumber) + final String accountNumber, + final String nationalCheckDigit) throws IbanFormatException { if(countryCode == null) { throw new IbanFormatException(COUNTRY_CODE_NOT_NULL, @@ -455,6 +456,12 @@ private void require(final CountryCode countryCode, throw new IbanFormatException(ACCOUNT_NUMBER_NOT_NULL, "accountNumber is required; it cannot be null"); } + if (BbanStructure.hasNationalCheckDigit(countryCode)) { + if (nationalCheckDigit == null) { + throw new IbanFormatException(NATIONAL_CHECK_DIGIT_NOT_NULL, + "nationalCheckDigit is required; it cannot be null"); + } + } } private void fillMissingFieldsRandomly() { diff --git a/src/main/java/org/iban4j/IbanFormatException.java b/src/main/java/org/iban4j/IbanFormatException.java index 58272af..474eaed 100644 --- a/src/main/java/org/iban4j/IbanFormatException.java +++ b/src/main/java/org/iban4j/IbanFormatException.java @@ -183,7 +183,8 @@ public static enum IbanFormatViolation { BBAN_ONLY_DIGITS_OR_LETTERS, BANK_CODE_NOT_NULL, - ACCOUNT_NUMBER_NOT_NULL + ACCOUNT_NUMBER_NOT_NULL, + NATIONAL_CHECK_DIGIT_NOT_NULL } } \ No newline at end of file diff --git a/src/main/java/org/iban4j/bban/BbanStructure.java b/src/main/java/org/iban4j/bban/BbanStructure.java index 7ef036e..692ba3c 100644 --- a/src/main/java/org/iban4j/bban/BbanStructure.java +++ b/src/main/java/org/iban4j/bban/BbanStructure.java @@ -481,6 +481,20 @@ public static BbanStructure forCountry(final CountryCode countryCode) { return structures.get(countryCode); } + /** + * Checks whether national Check digit is mandatory for specific country + * + * @param countryCode the country code + * @return true/false + */ + public static boolean hasNationalCheckDigit(final CountryCode countryCode) { + Optional bbanStructure = Optional.ofNullable(forCountry(countryCode)); + return bbanStructure.map(structure -> structure.getEntries() + .stream() + .anyMatch(e -> BbanEntryType.national_check_digit.equals(e.getEntryType()))) + .orElse(false); + } + public List getEntries() { return Collections.unmodifiableList(Arrays.asList(entries)); } diff --git a/src/test/java/org/iban4j/IbanTest.java b/src/test/java/org/iban4j/IbanTest.java index 77d8ddf..06a6aa8 100644 --- a/src/test/java/org/iban4j/IbanTest.java +++ b/src/test/java/org/iban4j/IbanTest.java @@ -22,9 +22,7 @@ import java.util.Collection; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertThat; @@ -465,5 +463,14 @@ public void ibanContructionRandomDoesNotOverwriteIdentificationNumber() { .buildRandom(); assertThat(iban.getIdentificationNumber(), is(equalTo("1234567890"))); } + + @Test(expected = IbanFormatException.class) + public void ibanConstructionWithLackingNationalCheckDigitShouldThrowExceptionIfValidationRequested() { + new Iban.Builder() + .countryCode(CountryCode.NO) + .bankCode("4435") + .accountNumber("0343730") + .build(true); + } } } From db2ccce7aab9774903345ad2343b8f6d166d2eb1 Mon Sep 17 00:00:00 2001 From: hajk1 Date: Tue, 13 Oct 2020 20:38:39 +0330 Subject: [PATCH 3/4] enable skipTests --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 22128da..93b4b58 100644 --- a/pom.xml +++ b/pom.xml @@ -102,7 +102,7 @@ ${surefireArgLine} - ${skip.unit.tests} + ${skipTests} **/IT*.java From 70eee95fec043433fe6126d157fc8859c80707e3 Mon Sep 17 00:00:00 2001 From: hajk1 Date: Tue, 13 Oct 2020 20:51:47 +0330 Subject: [PATCH 4/4] dependency update --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 93b4b58..70dcc80 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ UTF-8 1.8 - java18 + java18 true @@ -243,7 +243,7 @@ org.codehaus.mojo animal-sniffer-maven-plugin - 1.11 + 1.19 check-java-api @@ -255,7 +255,7 @@ org.codehaus.mojo.signature - ${jdk6Signature} + ${jdk8Signature} 1.0