Obliczanie sumy kontrolnej rachunku bankowego w C#

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);
    }
  }