C# :: Aufgabe #74 :: Lösung #4

4 Lösungen Lösungen öffentlich
#74

IBAN Checksumme prüfen

Anfänger - C# von pocki - 26.11.2014 um 12:27 Uhr
Schreibe eine Funktion, welche einen IBAN als Zeichenfolge entgegen nimmt.
Bei diese Zeichenfolge soll überprüft werden, ob die Checksumme/Prüfsumme für eine gültige IBAN stimmt.

Die unterschiedliche Schreibweisen (mit und ohne Freiraum) sowie die unterschiedlichen Längen je nach Land sind ebenfalls zu berücksichtigen.

Beispiele der Schreibweisen:
DE19 1234 1234 1234 1234 12
DE19-1234-1234-1234-1234-12
DE19123412341234123412
AT19 1234 1234 1234 1234
CH19 1234 1234 1234 1234 1
#4
vote_ok
von JKooP (18090 Punkte) - 18.04.2020 um 10:59 Uhr
Die Aufgabe ist zwar schon ein wenig älter, aber C# hat sich weiterentwickelt.
Hier eine Lösung mit NET Core 3.x (C#-8 erforderlich!):

Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace CS_Aufgabe_74_IBAN
{
    class Program
    {
        private static readonly Dictionary<string, int> IbanLenghts = new Dictionary<string, int>()
        {
            {"DE", 22 }, {"AT", 20}, {"CH", 21}
        };

        static void Main(string[] args)
        {
            const string IBAN = "DE68 2105 0170 0012 3456 78";
            var (iban, validation) = CheckIban(IBAN);
            Console.WriteLine($"IBAN '{iban}' is {validation}");
        }

        static (string iban, string validation) CheckIban(string iban)
        {
            var r = Regex.Replace(iban, @"[ \-]+", "");
            _ = IbanLenghts.TryGetValue(r[..2], out int l);

            if (r.Length != l || !Regex.IsMatch(r, @"\b[A-Z]{2}\d{"+(l-2)+"}"))
                return (r, "invalid");

            _ = decimal.TryParse(r[4..] + (r[0] - 55) + (r[1] - 55) + r[2..4], out var d);
            return (r, d % 97 == 1 ? "valid" : "invalid");
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben