Feedback

C# - IBAN erstellen aus Kontonummer AT/DE/CH

Veröffentlicht von am 20.12.2013
(0 Bewertungen)
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;
}

Abgelegt unter IBAN, Kontonummer, Bankleitzahl.

4 Kommentare zum Snippet

wallace693 schrieb am 11.02.2014:
Gutes Snippet mit einem kleinen Fehler: Die Prüfsumme muss zweistellig ausgegeben werden.
Vorschlag:
string iban = lkz + checksum.ToString().PadLeft(2,'0') + bban;
pocki_c schrieb am 11.02.2014:
Herzlichen Dank für den Hinweis, wurde geändert!
dotdani schrieb am 08.08.2016:
Soweit gut, wir haben aber in der Schweiz teilweise Buchstaben in den Kontonummern, dann funktioniert dieses Snippet nicht mehr.
pocki_c schrieb am 08.08.2016:
Danke für den Hinweis, dass war mir nicht bekannt.
 

Logge dich ein, um hier zu kommentieren!