arturmkrtchyan / iban4j

A Java library for generation and validation of the International Bank Account Numbers (IBAN ISO_13616) and Business Identifier Codes (BIC ISO_9362).
http://iban4j.org
Apache License 2.0
270 stars 124 forks source link

Provide meaningful exception messages #47

Open eximius313 opened 6 years ago

eximius313 commented 6 years ago

This code:

Iban build = new Iban.Builder()
        .countryCode(CountryCode.PL)
        .bankCode("22876")
        .accountNumber("63810519014")
        .build();
    System.out.println(build);

throws following exception:

Exception in thread "main" org.iban4j.IbanFormatException: [76nu] must contain only digits.
    at org.iban4j.IbanUtil.validateBbanEntryCharacterType(IbanUtil.java:409)
    at org.iban4j.IbanUtil.validateBbanEntries(IbanUtil.java:379)
    at org.iban4j.IbanUtil.validate(IbanUtil.java:80)
    at org.iban4j.Iban$Builder.build(Iban.java:365)
    at org.iban4j.Iban$Builder.build(Iban.java:337)

And what is even more weird, this code:

    Iban randomIban = Iban.random(CountryCode.PL);
    Iban build = new Iban.Builder()
        .countryCode(CountryCode.PL)
        .bankCode(randomIban.getBankCode())
        .accountNumber(randomIban.getAccountNumber())
        .build();

throws following exception:

Exception in thread "main" org.iban4j.IbanFormatException: [270nullnull2789991694524099] length is 27, expected BBAN length is: 24
    at org.iban4j.IbanUtil.validateBbanLength(IbanUtil.java:362)
    at org.iban4j.IbanUtil.validate(IbanUtil.java:79)
    at org.iban4j.Iban$Builder.build(Iban.java:365)
    at org.iban4j.Iban$Builder.build(Iban.java:337)

what's wrong?

arturmkrtchyan commented 6 years ago

Polish IBAN's have the following structure:

.countryCode(CountryCode.PL)
.bankCode("109")
.branchCode("0101")
.accountNumber("0000071219812874")
.nationalCheckDigit("4")
eximius313 commented 6 years ago

Could I ask then for more meaningful error messages in both cases and treat this issue as a Improvement Request? Something like: "branchCode" is required for requested CountryCode: XY "nationalCheckDigit" is required for requested CountryCode: XY

arturmkrtchyan commented 6 years ago

Absolutely! Lately I have not been actively adding feature requests, but going forward I'm planning to dedicate some time to it.

eximius313 commented 6 years ago

Thank you so much! I spend a lot of time debugging why [76nu] must contain only digits despite I provided only digits :)