diff --git a/obp-api/pom.xml b/obp-api/pom.xml
index ff162e689..40d044754 100644
--- a/obp-api/pom.xml
+++ b/obp-api/pom.xml
@@ -469,6 +469,13 @@
1.0.45
+
+
+
+ org.iban4j
+ iban4j
+ 3.2.1
+
diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala
index d8d9dc40a..116ab55da 100644
--- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala
+++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala
@@ -388,9 +388,9 @@ object SwaggerDefinitionsJSON {
)
val sepaCreditTransfersBerlinGroupV13 = SepaCreditTransfersBerlinGroupV13(
- debtorAccount = PaymentAccount(iban = "12345"),
+ debtorAccount = PaymentAccount(iban = "GB33BUKB20201555555555"),
instructedAmount = amountOfMoneyJsonV121,
- creditorAccount = PaymentAccount(iban = "54321"),
+ creditorAccount = PaymentAccount(iban = "DE75512108001245126199"),
creditorName = "John Miles"
)
diff --git a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala
index 0472d78c6..3ef8f4a12 100644
--- a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala
@@ -85,6 +85,8 @@ import net.liftweb.mapper.{By, _}
import net.liftweb.util.Helpers.{hours, now, time, tryo}
import net.liftweb.util.Mailer
import net.liftweb.util.Mailer.{From, PlainMailBodyType, Subject, To}
+import org.iban4j
+import org.iban4j.{CountryCode, IbanFormat}
import org.mindrot.jbcrypt.BCrypt
import scalacache.ScalaCache
import scalacache.guava.GuavaCache
@@ -121,8 +123,29 @@ object LocalMappedConnector extends Connector with MdcLoggable {
), callContext))
override def validateAndCheckIbanNumber(iban: String, callContext: Option[CallContext]): OBPReturnType[Box[IbanChecker]] = Future {
- // TODO Implement IBAN Checker
- (Full(IbanChecker(true, None)), callContext)
+ import org.iban4j.CountryCode
+ import org.iban4j.Iban
+ import org.iban4j.IbanFormat
+ import org.iban4j.IbanFormatException
+ import org.iban4j.IbanUtil
+ import org.iban4j.InvalidCheckDigitException
+ import org.iban4j.UnsupportedCountryException
+
+ // Validate Iban
+ try { // 1st try
+ IbanUtil.validate(iban) // IBAN as String: "DE89370400440532013000"
+ (Full(IbanChecker(true, None)), callContext) // valid
+ } catch {
+ case error@(_: IbanFormatException | _: InvalidCheckDigitException | _: UnsupportedCountryException) =>
+ // invalid
+ try { // 2nd try
+ IbanUtil.validate(iban, IbanFormat.Default) // IBAN as formatted String: "DE89 3704 0044 0532 0130 00"
+ (Full(IbanChecker(true, None)), callContext) // valid
+ } catch {
+ case error@(_: IbanFormatException | _: InvalidCheckDigitException | _: UnsupportedCountryException) =>
+ (Full(IbanChecker(false, None)), callContext) // invalid
+ }
+ }
}
// Gets current challenge level for transaction request
diff --git a/obp-api/src/test/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApiTest.scala b/obp-api/src/test/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApiTest.scala
index 5276b2d33..844655868 100644
--- a/obp-api/src/test/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApiTest.scala
+++ b/obp-api/src/test/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApiTest.scala
@@ -45,7 +45,7 @@ class PaymentInitiationServicePISApiTest extends BerlinGroupServerSetupV1_3 with
| "amount": "1234"
|},
|"creditorAccount": {
- | "iban": "123"
+ | "iban": "DE75512108001245126199"
|},
|"creditorName": "70charname"
}""".stripMargin
@@ -69,7 +69,7 @@ class PaymentInitiationServicePISApiTest extends BerlinGroupServerSetupV1_3 with
| "amount": "-1234"
|},
|"creditorAccount": {
- | "iban": "12321"
+ | "iban": "DE75512108001245126199"
|},
|"creditorName": "70charname"
}""".stripMargin
diff --git a/obp-api/src/test/scala/code/setup/LocalMappedConnectorTestSetup.scala b/obp-api/src/test/scala/code/setup/LocalMappedConnectorTestSetup.scala
index be63b0085..ab9834d58 100644
--- a/obp-api/src/test/scala/code/setup/LocalMappedConnectorTestSetup.scala
+++ b/obp-api/src/test/scala/code/setup/LocalMappedConnectorTestSetup.scala
@@ -16,6 +16,7 @@ import com.openbankproject.commons.model.enums.AccountRoutingScheme
import net.liftweb.common.Box
import net.liftweb.mapper.{By, MetaMapper}
import net.liftweb.util.Helpers._
+import org.iban4j
import scala.util.Random
@@ -62,7 +63,7 @@ trait LocalMappedConnectorTestSetup extends TestConnectorSetupWithStandardPermis
.BankId(bankId.value)
.AccountId(accountId.value)
.AccountRoutingScheme(AccountRoutingScheme.IBAN.toString)
- .AccountRoutingAddress(randomString(20))
+ .AccountRoutingAddress(iban4j.Iban.random().toString())
.saveMe
BankAccountRouting.create
.BankId(bankId.value)