Klasa IbanHelper pozwala na wyznaczenie dwóch cyfr początkowych numeru rachunku bankowego - tzw. sumy kontrolnej.
public static class IbanHelper
{
/// <summary>
/// Wyznacza cyfry kontrolne numeru rachunku bankowego na podstawie dwóch jego fragmentów (cyfr ma razem ma być 6 x 4 = 24)
/// <param name="prefix">Część stała numeru rachunku (przyznana pula)</param>
/// <param name="nr_end">Część zmienna numeru rachunku</param>
/// <param name="ctrlCifers">cyfry kontrolne</param>
/// <param name="ibanCifers">reszta numeru rachunku (bez spacji)</param>
public static void Wyznacz(string prefix, string nr_end, out int ctrlCifers, out string ibanCifers)
{
string nrIban = prefix + nr_end;
if (string.IsNullOrEmpty(nrIban))
throw new ArgumentException("Nie podano numeru rachunku.");
nrIban = nrIban.Replace(" ", null); // usunięcie ewentualnych spacji
if (!Regex.IsMatch(nrIban, @"^\d{24}$"))
throw new ArgumentException("Podany numer rachunku jest nieprawidłowy.");
string nr2 = nrIban + "252100"; // A=10, B=11, ..., L=21, ..., P=25 oraz 2 zera
int modulo = 0;
foreach (char znak in nr2)
modulo = (10 * modulo + int.Parse(znak.ToString())) % 97;
modulo = 98 - modulo;
ctrlCifers = modulo;
ibanCifers = nrIban;
}
/// <summary>
/// Wyznacza numer rachunku bankowego na podstawie dwóch jego fragmentów (cyfr ma razem ma być 6 x 4 = 24)
/// dodając cyfry kontrolne na początku.
/// Postać: CC AAAA BBBB CCCC DDDD EEEE FFFF
/// </summary>
/// <param name="prefix">Część stała numeru rachunku (przyznana pula)</param>
/// <param name="nr_end">Część zmienna numeru rachunku</param>
public static string WyliczNRB_Segm(string prefix, string nr_end)
{
int modulo;
string nrIban;
Wyznacz(prefix, nr_end, out modulo, out nrIban);
return string.Format("{0:00} {1}", modulo, string.Join(" ", Regex.Split(nrIban, "(....)(....)(....)(....)(....)(....)")).Trim());
}
/// <summary>
/// Wyznacza numer rachunku bankowego na podstawie dwóch jego fragmentów (cyfr ma razem ma być 6 x 4 = 24)
/// dodając cyfry kontrolne na początku.
/// Postać: CCAAAABBBBCCCCDDDDEEEEFFFF
/// </summary>
/// <param name="prefix">Część stała numeru rachunku (przyznana pula)</param>
/// <param name="nr_end">Część zmienna numeru rachunku</param>
public static string WyliczNRB_NoSpaces(string prefix, string nr_end)
{
int modulo;
string nrIban;
Wyznacz(prefix, nr_end, out modulo, out nrIban);
return string.Format("{0:00}{1}", modulo, nrIban);
}
}