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.
GFU-Schulungen  [Anzeige]

VB.NET Komplett

Sie stehen vo der Aufgabe, individuelle Anwendungen für Windows zu schreiben. Hier ist VB.NET die optimale Sprache. Sie erlernt sich recht leicht und passt sich komplett in die .NET Umgebung von Microsoft ein. Nach der Schulung entwickeln Sie anwenderfreundliche Programme in VB.NET . Mit den objektorientierten Modellen in VB.NET erzeugen Sie außerdem wiederverwendbare Komponenten.

C# 2017/2015/2013 Aufbau

In dieser Schulung lernen Sie fortgeschrittene Techniken im Bereich .Net C#. Dabei stehen neben den eigentlichen Techniken auch architektonische Aspekte im Mittelpunkt.

/// <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!