From 0d60cd2c3e95bc8d643ecf539316ad2420828e87 Mon Sep 17 00:00:00 2001 From: dankl Date: Thu, 2 Jan 2020 14:34:05 +0100 Subject: [PATCH] Fixed that if Luhn sum modulo 10 is 0, then checksum is 0 not 10 --- .../net/dankito/fints/tan/FlickercodeDecoder.kt | 9 +++++++++ .../net/dankito/fints/tan/FlickercodeDecoderTest.kt | 13 +++++++++++++ 2 files changed, 22 insertions(+) diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/tan/FlickercodeDecoder.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/tan/FlickercodeDecoder.kt index 39a87477..ff415d39 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/tan/FlickercodeDecoder.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/tan/FlickercodeDecoder.kt @@ -132,6 +132,15 @@ open class FlickercodeDecoder { asNumber }.sum() + val luhnSumModulo10 = luhnSum % 10 + + // Schritt 3: Das Ergebnis der Addition aus Schritt 2 ist von dem auf die nächst höhere Zahl mit der + // Einerstelle 0 aufgerundeten Ergebnis der Addition aus Schritt 2 abzuziehen. Wenn das Ergebnis der Addition + // aus Schritt 2 bereits eine Zahl mit der Einerstelle 0 ergibt (z. B. 30, 40, usw.), ist die Prüfziffer 0. + if (luhnSumModulo10 == 0) { + return 0 + } + return 10 - (luhnSum % 10) } diff --git a/fints4javaLib/src/test/kotlin/net/dankito/fints/tan/FlickercodeDecoderTest.kt b/fints4javaLib/src/test/kotlin/net/dankito/fints/tan/FlickercodeDecoderTest.kt index ff6cf9df..c6010b9c 100644 --- a/fints4javaLib/src/test/kotlin/net/dankito/fints/tan/FlickercodeDecoderTest.kt +++ b/fints4javaLib/src/test/kotlin/net/dankito/fints/tan/FlickercodeDecoderTest.kt @@ -53,4 +53,17 @@ class FlickercodeDecoderTest { assertThat(result.parsedDataSet).isEqualTo("1204881696280598765432101533322C30303A") } + @Test + fun decodeChallenge_CheckLuhnSumModulo10Is0() { + + // given + val challenge = "100880040243" + + // when + val result = underTest.decodeChallenge(challenge) + + // then + assertThat(result.parsedDataSet).isEqualTo("0604800402430B") + } + } \ No newline at end of file