/* ######################################################## # Funktionen fuer die Umwandlung und Verifizierung von IBAN/BIC # Fragen/Kommentare bitte auf http://donauweb.at/online-marketing-blog/2013/07/25/iban-und-bic-statt-konto-und-blz/ ######################################################## */ /* ######################################################## # BLZ und BIC in AT: http://www.conserio.at/bankleitzahl/ # BLZ und BIC in DE: http://www.bundesbank.de/Redaktion/DE/Standardartikel/Kerngeschaeftsfelder/Unbarer_Zahlungsverkehr/bankleitzahlen_download.html ######################################################## */ /* ######################################################## # Funktionen mit Dank an http://www.cool-it.at/ ######################################################## # IBANCleaner ######################################################## */ private static string IBANCleaner(string IBAN) { for (int x = 65; x <= 90; x++) { if (IBAN.IndexOf((char)x) < 0) continue; int replacewith = x - 64 + 9; string replace = ((char)x).ToString(); IBAN = IBAN.Replace(replace, replacewith.ToString()); } return IBAN; } /* ######################################################## # Modulo ######################################################## */ private static int Modulo(string numString, int divider) { int rest = int.Parse(numString.Substring(0, 1)); for (int i = 1; i < numString.Length; i++) { int v = int.Parse(numString.Substring(i, 1)); rest *= 10; rest += v; rest %= 97; } return rest; } /* ######################################################## # CalcIBAN ######################################################## */ public static string CalcIBAN(string BLZ, string KtoNr) { string IBAN = string.Empty; try { BLZ = BLZ.Replace(" ", ""); // Trennzeichen entfernen. KtoNr = KtoNr.Replace(" ", "").Replace("-", "").Replace(".", ""); string BBAN = IBANCleaner(string.Format("{0}{1}", BLZ.PadLeft(8, '0'), KtoNr.PadLeft(10, '0'))); int p = 98 - Modulo(string.Format("{0}131400", BBAN), 97); IBAN = string.Format("DE{0}{1}", p.ToString().PadLeft(2, '0'), BBAN); } catch { } return IBAN; } /* ######################################################## # CorrectIBAN ######################################################## */ public static string CorrectIBAN(string IBAN) { if (string.IsNullOrEmpty(IBAN)) return IBAN; if (IBAN.Length < 15) return string.Empty; // Validierung nach http://www.iban.ws/iban_validierung.htm // Vorgehensweise (am Beispiel DE18 1203 0000 0012 3456 78) IBAN = IBAN.Trim().ToUpper(); string mainpart = IBAN.Substring(4); // wir schneiden DExx ab. string checksum = IBAN.Substring(2, 2); // nur Pruefsumme string country = IBAN.Substring(0, 2); // nur Laendercode // Laendercode an den Schluss stellen und alle(!) // Buchstaben ersetzen durch ihre Position im Alphabet + 9 // hier wird D zu 4 + 9 = 13 und E wird zu 5 + 9 = 14 mainpart = IBANCleaner(string.Format("{0}{1}", mainpart, country)); // Pruefsumme hinten anhaengen => ergibt 120300000012345678131418 string completeString = string.Format("{0}{1}", mainpart, checksum); double tetNum; bool valid = double.TryParse(completeString, out tetNum); if (!valid) return string.Empty; // Man berechnet den Rest der ganzzahligen Division des Ergebnisses von 2. durch 97 // Wenn das Ergebnis 1 ist, ist die IBAN gueltig, ansonsten falsch valid = (Modulo(completeString, 97) == 1); if (!valid) return string.Empty; return IBAN; }