From 1e827ada6ad5ca16bc8c8fae7a344b15191afb1a Mon Sep 17 00:00:00 2001 From: Daniel Holm Date: Wed, 10 May 2023 22:28:04 +0200 Subject: [PATCH] Fix issue with leading zero check digits Fixes #92 --- src/main/java/nl/garvelink/iban/IBAN.java | 2 +- src/test/java/nl/garvelink/iban/IBANTest.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/nl/garvelink/iban/IBAN.java b/src/main/java/nl/garvelink/iban/IBAN.java index 1c85f80..55b9df5 100644 --- a/src/main/java/nl/garvelink/iban/IBAN.java +++ b/src/main/java/nl/garvelink/iban/IBAN.java @@ -150,7 +150,7 @@ public static IBAN compose(CharSequence countryCode, CharSequence bban) { StringBuilder sb = new StringBuilder(CountryCodes.LONGEST_IBAN_LENGTH).append(countryCode).append("00").append(bban); int checkDigits = Modulo97.calculateCheckDigits(sb); - sb.replace(2, 4, Integer.toString(checkDigits)); + sb.replace(2, 4, String.format("%02d", checkDigits)); return parse(sb); } diff --git a/src/test/java/nl/garvelink/iban/IBANTest.java b/src/test/java/nl/garvelink/iban/IBANTest.java index 8308de6..32a9aa9 100644 --- a/src/test/java/nl/garvelink/iban/IBANTest.java +++ b/src/test/java/nl/garvelink/iban/IBANTest.java @@ -38,8 +38,8 @@ * Miscellaneous tests for the {@link IBAN} class. */ public class IBANTest { - private static final String VALID_IBAN = "NL91ABNA0417164300"; - private static final String INVALID_IBAN = "NL12ABNA0417164300"; + private static final String VALID_IBAN = "NL03ABNA0143267469"; + private static final String INVALID_IBAN = "NL13ABNA0143267469"; @Test public void getCountryCodeShouldReturnTheCountryCode() { @@ -48,7 +48,7 @@ public void getCountryCodeShouldReturnTheCountryCode() { @Test public void getCheckDigitsShouldReturnTheCheckDigits() { - assertThat(IBAN.parse(VALID_IBAN).getCheckDigits(), is("91")); + assertThat(IBAN.parse(VALID_IBAN).getCheckDigits(), is("03")); } @Test @@ -200,7 +200,7 @@ public void testSerializationRoundTrip() throws IOException, ClassNotFoundExcept public void testSerializedFormCompatibility() throws IOException, ClassNotFoundException { // This was manually sampled from the preceding test. This test is to ensure that the serialised form remains // stable as the library evolves. - String serializedForm = "rO0ABXNyAB5ubC5nYXJ2ZWxpbmsuaWJhbi5JQkFOJE1lbWVudG8AAAAAAAAAAQwAAHhwdxwAAAAAAAAAAQASTkw5MUFCTkEwNDE3MTY0MzAweA=="; + String serializedForm = "rO0ABXNyAB5ubC5nYXJ2ZWxpbmsuaWJhbi5JQkFOJE1lbWVudG8AAAAAAAAAAQwAAHhwdxwAAAAAAAAAAQASTkwwM0FCTkEwMTQzMjY3NDY5eA=="; ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(Base64.getDecoder().decode(serializedForm))); IBAN copy = (IBAN) ois.readObject(); assertThat(copy.toPlainString(), is(equalTo(VALID_IBAN)));