Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: NRB/IBAN z zupełnie innej strony
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
KR2615
Witajcie. Przeryłem wszystkie internety w poszukiwaniu generatora sumy kontrolnej dla numeru rachunku bankowego. Wszystkie które znalazłem potrafią tylko weryfikować jej poprawność, tzn na wejściu dostają 26 liczb, przestawiają je, wymnażają razy wagi i sprawdzają czy modulo 97 wyniku tego mnożenia jest równe jeden.

Mnie natomiast chodzi o coś, co na wejściu dostaje 24 znaki a wypluwa dwa pierwsze czyli sumę kontrolną. Googlując odwrotność modulo trafiłem tylko na coś co się zwie rozszerzony algorytm Euklidesa ale niestety przerasta mnie to matematycznie. Jedyne na co wpadłem to pętla inkrementująca pierwsze dwa znaki aż do momentu, aż funkcja weyfikująca numer IBAN nie zwróci true. Wiem, że jest to fatalne pod względem wykorzystania zasobów tym bardziej, jeśli będę chciał wygenerować sumy dla kilkudziesięciu rachunków.

Czy ktoś z Was posiada gotowca i zechciałby się nim podzielić?

Na prawdę nikt nic?
LowiczakPL

Kod
  public static string WyliczajNRB(string bban) {
      if (string.IsNullOrEmpty(bban))
          throw new ArgumentException("Musisz podać numeru rachunku.");
      bban = bban.Replace(" ", null);
      if (!Regex.IsMatch(bban, @"^\d{24}$"))
          throw new ArgumentException("Podany numer rachunku jest nieprawidłowy!");
  
      string nr2 = bban + "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;
  
      return string.Format("{0:00} {1}", modulo, string.Join(" ",
          Regex.Split(bban, "(....)(....)(....)(....)(....)(....)")).Trim());
  }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.