Sprache: C#
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.
[b]ACHTUNG: Nur die Banken selbst geben korrekte IBANs heraus. Manche herausgegebene IBANs wurden (noch) nicht richtig von den Banken erstellt.[/b]
/// <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;
}
/// <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;
}
Alte URL:
/snippet/iban-erstellen-aus-kontonummer-at-de-ch/3810
Gutes Snippet mit einem kleinen Fehler: Die Prüfsumme muss zweistellig ausgegeben werden.
Vorschlag:
string iban = lkz + checksum.ToString().PadLeft(2,’0′) + bban;
Herzlichen Dank für den Hinweis, wurde geändert!
Soweit gut, wir haben aber in der Schweiz teilweise Buchstaben in den Kontonummern, dann funktioniert dieses Snippet nicht mehr.
Danke für den Hinweis, dass war mir nicht bekannt.