Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> NRB/IBAN z zupełnie innej strony
KR2615
post 20.06.2016, 06:58:38
Post #1





Grupa: Zarejestrowani
Postów: 311
Pomógł: 13
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
LowiczakPL
post 4.07.2016, 22:34:31
Post #2





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----



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


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 17.04.2024 - 00:00