diff --git a/pom.xml b/pom.xml
index c319f7de..d0f5c957 100644
--- a/pom.xml
+++ b/pom.xml
@@ -87,7 +87,7 @@
3.0.1
1.0.0
2.0.17
- 3.2.13-RELEASE
+ 1.8.4
1.10.1
2.4-groovy-4.0
4.0.30
@@ -135,9 +135,9 @@
${dep.slf4j.version}
- org.iban4j
- iban4j
- ${dep.iban4j.version}
+ de.speedbanking
+ iban-commons
+ ${dep.iban-commons.version}
commons-validator
diff --git a/src/main/java/com/devskiller/jfairy/data/MapBasedDataMaster.java b/src/main/java/com/devskiller/jfairy/data/MapBasedDataMaster.java
index 14605dca..5afdf3b6 100644
--- a/src/main/java/com/devskiller/jfairy/data/MapBasedDataMaster.java
+++ b/src/main/java/com/devskiller/jfairy/data/MapBasedDataMaster.java
@@ -109,6 +109,7 @@ public void readResources(String path) throws IOException {
final Load load = new Load(loadSettings);
final URL url = resources.nextElement();
try (InputStream is = url.openStream()) {
+ @SuppressWarnings("unchecked")
final Map data = (Map) load.loadFromInputStream(is);
appendData(data);
}
diff --git a/src/main/java/com/devskiller/jfairy/producer/payment/DefaultIBANProvider.java b/src/main/java/com/devskiller/jfairy/producer/payment/DefaultIBANProvider.java
index 258d3c71..6eff059b 100644
--- a/src/main/java/com/devskiller/jfairy/producer/payment/DefaultIBANProvider.java
+++ b/src/main/java/com/devskiller/jfairy/producer/payment/DefaultIBANProvider.java
@@ -1,19 +1,17 @@
package com.devskiller.jfairy.producer.payment;
-import java.util.IllegalFormatCodePointException;
import java.util.List;
+import java.util.Optional;
-import org.iban4j.CountryCode;
-import org.iban4j.Iban;
-import org.iban4j.UnsupportedCountryException;
+import de.speedbanking.iban.Iban;
+import de.speedbanking.iban.IbanRegistry;
+import de.speedbanking.iban.RandomIban;
import org.jspecify.annotations.Nullable;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.person.Country;
-import static com.devskiller.jfairy.producer.util.StringUtils.isNotEmpty;
-
/**
* ALPHA: Under development
*/
@@ -21,11 +19,7 @@ public class DefaultIBANProvider implements IBANProvider {
protected final DataMaster dataMaster;
protected final BaseProducer baseProducer;
- protected CountryCode countryCode;
- protected String accountNumber;
- protected String bankCode;
- protected String branchCode;
- protected String nationalCheckDigit;
+ protected String countryCode;
public DefaultIBANProvider(BaseProducer baseProducer,
DataMaster dataMaster,
@@ -39,38 +33,21 @@ public DefaultIBANProvider(BaseProducer baseProducer,
@Override
public @Nullable IBAN get() {
- try {
-
- fillCountryCode();
-
- try {
-
- Iban.Builder builder = new Iban.Builder()
- .countryCode(countryCode)
- .bankCode(bankCode)
- .branchCode(branchCode)
- .nationalCheckDigit(nationalCheckDigit);
- if (isNotEmpty(accountNumber)) {
- builder.accountNumber(accountNumber);
- }
- Iban iban = builder.buildRandom();
-
- String identificationNumber = iban.getIdentificationNumber();
- String checkDigit = iban.getCheckDigit();
- String accountType = iban.getAccountType();
- String bban = iban.getBban();
- String ownerAccountType = iban.getOwnerAccountType();
- String ibanNumber = iban.toString();
+ fillCountryCode();
- return new IBAN(accountNumber, identificationNumber, branchCode, checkDigit,
- accountType, bankCode, bban, countryCode.getName(), nationalCheckDigit,
- ownerAccountType, ibanNumber);
- } catch (UnsupportedCountryException ex) {
- return null;
- }
- } catch (IllegalFormatCodePointException ex) {
- throw new IllegalArgumentException("Invalid iban " + ex.getMessage(), ex);
+ IbanRegistry reg = IbanRegistry.getByCode(countryCode);
+ if (reg == null) {
+ return null;
}
+ Iban iban = RandomIban.of(countryCode);
+
+ return new IBAN(iban.getAccountNumber(),
+ iban.getCheckDigits(),
+ iban.getBankCode(),
+ iban.getBban(),
+ iban.getCountryCode(),
+ iban.getNationalCheckDigit(),
+ iban.toString());
}
@Override
@@ -78,33 +55,15 @@ public void fillCountryCode() {
if (countryCode == null) {
List countries = Country.findCountryForLanguage(dataMaster.getLanguage());
Country country = baseProducer.randomElement(countries);
- countryCode = CountryCode.valueOf(country.getCode());
- }
- }
-
- @Override
- public void setNationalCheckDigit(String nationalCheckDigit) {
- this.nationalCheckDigit = nationalCheckDigit;
- }
- @Override
- public void setBranchCode(String branchCode) {
- this.branchCode = branchCode;
+ IbanRegistry r = IbanRegistry.getByCode(country.getCode());
+ countryCode = Optional.ofNullable(r).map(IbanRegistry::name).orElse(null);
+ }
}
@Override
public void setCountry(String country) {
- this.countryCode = CountryCode.valueOf(country);
- }
-
- @Override
- public void setAccountNumber(String accountNumber) {
- this.accountNumber = accountNumber;
- }
-
- @Override
- public void setBankCode(String bankCode) {
- this.bankCode = bankCode;
+ this.countryCode = country;
}
}
diff --git a/src/main/java/com/devskiller/jfairy/producer/payment/IBAN.java b/src/main/java/com/devskiller/jfairy/producer/payment/IBAN.java
index ba14367c..05d1ec97 100644
--- a/src/main/java/com/devskiller/jfairy/producer/payment/IBAN.java
+++ b/src/main/java/com/devskiller/jfairy/producer/payment/IBAN.java
@@ -3,29 +3,21 @@
public class IBAN {
private final String accountNumber;
- private final String identificationNumber;
- private final String branchCode;
private final String checkDigit;
- private final String accountType;
private final String bankCode;
private final String bban;
private final String country;
private final String nationalCheckDigit;
- private final String ownerAccountType;
private final String ibanNumber;
- public IBAN(String accountNumber, String identificationNumber, String branchCode, String checkDigit,
- String accountType, String bankCode, String bban, String country, String nationalCheckDigit, String ownerAccountType, String ibanNumber) {
+ public IBAN(String accountNumber, String checkDigit, String bankCode, String bban,
+ String country, String nationalCheckDigit, String ibanNumber) {
this.accountNumber = accountNumber;
- this.identificationNumber = identificationNumber;
- this.branchCode = branchCode;
this.checkDigit = checkDigit;
- this.accountType = accountType;
this.bankCode = bankCode;
this.bban = bban;
this.country = country;
this.nationalCheckDigit = nationalCheckDigit;
- this.ownerAccountType = ownerAccountType;
this.ibanNumber = ibanNumber;
}
@@ -33,22 +25,10 @@ public String getAccountNumber() {
return accountNumber;
}
- public String getIdentificationNumber() {
- return identificationNumber;
- }
-
- public String getBranchCode() {
- return branchCode;
- }
-
public String getCheckDigit() {
return checkDigit;
}
- public String getAccountType() {
- return accountType;
- }
-
public String getBankCode() {
return bankCode;
}
@@ -65,10 +45,6 @@ public String getNationalCheckDigit() {
return nationalCheckDigit;
}
- public String getOwnerAccountType() {
- return ownerAccountType;
- }
-
public String getIbanNumber() {
return ibanNumber;
}
diff --git a/src/main/java/com/devskiller/jfairy/producer/payment/IBANProperties.java b/src/main/java/com/devskiller/jfairy/producer/payment/IBANProperties.java
index f1ad543e..2d822c12 100644
--- a/src/main/java/com/devskiller/jfairy/producer/payment/IBANProperties.java
+++ b/src/main/java/com/devskiller/jfairy/producer/payment/IBANProperties.java
@@ -3,25 +3,24 @@
import java.util.HashMap;
import java.util.Map;
-import org.iban4j.CountryCode;
+import de.speedbanking.iban.IbanRegistry;
import com.devskiller.jfairy.producer.util.LanguageCode;
public final class IBANProperties {
- private static final HashMap COUNTRIES = new HashMap<>();
+ private static final Map COUNTRIES = new HashMap<>();
static {
- COUNTRIES.put(LanguageCode.PL, CountryCode.PL);
- COUNTRIES.put(LanguageCode.EN, CountryCode.GB);
- COUNTRIES.put(LanguageCode.ES, CountryCode.ES);
- COUNTRIES.put(LanguageCode.FR, CountryCode.FR);
- COUNTRIES.put(LanguageCode.KA, CountryCode.GE);
- COUNTRIES.put(LanguageCode.IT, CountryCode.IT);
- COUNTRIES.put(LanguageCode.DE, CountryCode.DE);
- COUNTRIES.put(LanguageCode.SK, CountryCode.SK);
- COUNTRIES.put(LanguageCode.SV, CountryCode.SV);
- COUNTRIES.put(LanguageCode.ZH, CountryCode.TW);
+ COUNTRIES.put(LanguageCode.PL, IbanRegistry.PL);
+ COUNTRIES.put(LanguageCode.EN, IbanRegistry.GB);
+ COUNTRIES.put(LanguageCode.ES, IbanRegistry.ES);
+ COUNTRIES.put(LanguageCode.FR, IbanRegistry.FR);
+ COUNTRIES.put(LanguageCode.KA, IbanRegistry.GE);
+ COUNTRIES.put(LanguageCode.IT, IbanRegistry.IT);
+ COUNTRIES.put(LanguageCode.DE, IbanRegistry.DE);
+ COUNTRIES.put(LanguageCode.SK, IbanRegistry.SK);
+ COUNTRIES.put(LanguageCode.SV, IbanRegistry.SV);
}
private IBANProperties() {
@@ -33,33 +32,6 @@ public abstract static class Property {
}
- public static Property branchCode(final String branchCode) {
- return new Property() {
- @Override
- public void apply(IBANProvider provider) {
- provider.setBranchCode(branchCode);
- }
- };
- }
-
- public static Property nationalCheckDigit(final String nationalCheckDigit) {
- return new Property() {
- @Override
- public void apply(IBANProvider provider) {
- provider.setNationalCheckDigit(nationalCheckDigit);
- }
- };
- }
-
- public static Property accountNumber(final String accountNumber) {
- return new Property() {
- @Override
- public void apply(IBANProvider provider) {
- provider.setAccountNumber(accountNumber);
- }
- };
- }
-
public static Property country(final String country) {
return new Property() {
@Override
@@ -82,18 +54,9 @@ private static String countryFromLanguage(String lang) {
return COUNTRIES.entrySet().stream()
.filter(locale -> locale.getKey().name().equals(lang))
.map(Map.Entry::getValue)
- .map(CountryCode::getAlpha2)
+ .map(IbanRegistry::name)
.findFirst()
.orElse("PL");
}
- public static Property bankCode(final String bankCode) {
- return new Property() {
- @Override
- public void apply(IBANProvider provider) {
- provider.setBankCode(bankCode);
- }
- };
- }
-
}
diff --git a/src/main/java/com/devskiller/jfairy/producer/payment/IBANProvider.java b/src/main/java/com/devskiller/jfairy/producer/payment/IBANProvider.java
index fc5abc70..55fd4606 100644
--- a/src/main/java/com/devskiller/jfairy/producer/payment/IBANProvider.java
+++ b/src/main/java/com/devskiller/jfairy/producer/payment/IBANProvider.java
@@ -9,13 +9,6 @@ public interface IBANProvider extends Supplier {
void fillCountryCode();
- void setNationalCheckDigit(String nationalCheckDigit);
-
- void setBranchCode(String branchCode);
-
void setCountry(String country);
- void setAccountNumber(String accountNumber);
-
- void setBankCode(String bankCode);
}
diff --git a/src/test/groovy/com/devskiller/jfairy/producer/payment/IBANSpec.groovy b/src/test/groovy/com/devskiller/jfairy/producer/payment/IBANSpec.groovy
index 8968fbcc..c95fd2de 100644
--- a/src/test/groovy/com/devskiller/jfairy/producer/payment/IBANSpec.groovy
+++ b/src/test/groovy/com/devskiller/jfairy/producer/payment/IBANSpec.groovy
@@ -1,6 +1,6 @@
package com.devskiller.jfairy.producer.payment
-import org.iban4j.IbanUtil
+import de.speedbanking.iban.IbanValidator
import spock.lang.Specification
import com.devskiller.jfairy.Fairy
@@ -25,23 +25,21 @@ class IBANSpec extends Specification {
* ATkk bbbb bccc cccc cccc
*
* b = National bank code
- c = Account number
*/
def "should return valid iban"() {
when:
IBANProvider iban = new DefaultIBANProvider(
baseProducer,
dataMaster,
- IBANProperties.accountNumber("00234573201"),
IBANProperties.country("AT")
)
then:
- IbanUtil.validate(iban.get().ibanNumber)
+ IbanValidator.validate(iban.get().ibanNumber)
}
/**
- * Poland 28 24n PLkk bbbs sssx cccc cccc cccc cccc b = National bank code
+ Poland 28 24n PLkk bbbs sssx cccc cccc cccc cccc b = National bank code
s = Branch code
x = National check digit
c = Account number,
@@ -53,7 +51,7 @@ class IBANSpec extends Specification {
when:
IBANProvider iban = new DefaultIBANProvider(baseProducer, dataMaster)
then:
- IbanUtil.validate(iban.get().ibanNumber)
+ IbanValidator.validate(iban.get().ibanNumber)
}
def "should be usable directly from Fairy"() {