Mit diesem Snippet lassen sich vollständige IBANs aus Kontonummern und Bankleitzahlen (AT/DE) bzw. Bankclearing-Nr. (CH) erstellen.
Die Prüfsumme wird wie laut Standard nach ISO 7064 erstellt.
Die Kontonummern dürfen für dieses Snippet nur Zahlen enthalten.
ACHTUNG: Nur die Banken selbst geben korrekte IBANs heraus. Manche herausgegebene IBANs wurden (noch) nicht richtig von den Banken erstellt.
/// <summary>
/// Erstellt eine IBAN für AT/DE/CH von vorhandenen Kontonummer und BLZ bzw. Bankclearing-Nr.
/// </summary>
/// <param name="lkz">Ländercode nach ISO 3166-1</param>
/// <param name="blz">Bankleitzahl (AT/DE) bzw. Bankclearing-Nr. (CH) </param>
/// <param name="kntnr">Kontonummer</param>
/// <param name="groupedReturn">Rückgabe bei <c>True</c> in 4er Gruppierung</param>
/// <returns>Vollständigen IBAN mit Ländercode und Prüfsumme</returns>
public static string CreateIban(string lkz, string blz, string kntnr, bool groupedReturn = true)
{
string bban = string.Empty;
lkz = lkz.ToUpper();
switch (lkz)
{
case "AT":
{
bban = blz.PadLeft(5, '0') + kntnr.PadLeft(11, '0');
}
break;
case "DE":
{
bban = blz.PadLeft(8, '0') + kntnr.PadLeft(10, '0');
}
break;
case "CH":
{
bban = blz.PadLeft(5, '0') + kntnr.PadLeft(12, '0');
}
break;
}
string sum = bban + lkz.Aggregate("", (current, c) => current + (c - 55).ToString()) + "00";
var d = decimal.Parse(sum);
var checksum = 98 - (d % 97);
string iban = lkz + checksum.ToString().PadLeft(2,'0') + bban;
return groupedReturn ? iban.Select((c, i) => (i % 4 == 3) ? c + " " : c + "").Aggregate("", (current, c) => current + c) : iban;
}
4 Kommentare zum Snippet