walidacja numeru konta bankowego

Odpowiedz Nowy wątek
2015-01-13 13:35
0

Hejka

Moglibyście ocenić i sprawdzić czy kod nie ma rażących błedów?

 public static bool IsValidBankAccountNumber(string input)
        {
            bool result = false;
            input = input.Replace(" ", String.Empty);
            if (input.Length == 26 || input.Length == 32)
            {
                string checkSum = input.Substring(0, 2);
                string accountNumber = input.Substring(2);
                const int countryCode = 2521;
                string reversedDigits = accountNumber + countryCode + checkSum;
                int controlNum = ModString(reversedDigits, 97);

                result = (controlNum == 1) ? true : false;
            }

            return result;
        }

        static int ModString(string x, int y)
        {
            if (x.Length == 0)
                return 0;
            string x2 = x.Substring(0, x.Length - 1); // first digits
            int x3 = int.Parse(x.Substring(x.Length - 1));   // last digit
            return (ModString(x2, y) * 10 + x3) % y;
        } 

Dzięki wielkie za odp.

Pozdrawiam,
Łukasz

Pozostało 580 znaków

2015-01-15 10:08
0
result = (controlNum == 1) ? true : false;

To można zapisać po prostu jako

 result = (controlNum == 1);

Można też odwrócić warunek w pierwszej metodzie i pozbyć się bloku dla ifa:

 public static bool IsValidBankAccountNumber(string input)
        {
            if (input.Length != 26 && input.Length != 32) return false;

            input = input.Replace(" ", String.Empty);

            string checkSum = input.Substring(0, 2);
            string accountNumber = input.Substring(2);
            const int countryCode = 2521;
            string reversedDigits = accountNumber + countryCode + checkSum;
            int controlNum = ModString(reversedDigits, 97);

            return (controlNum == 1);

        }

Ale ogólnie wygląda nieźle, tylko nazwy zmiennych w drugiej metodzie trochę mało mówią o ich zawartości ;)


edytowany 3x, ostatnio: mar-ek1, 2015-01-15 10:09

Pozostało 580 znaków

2015-01-15 10:10
0

Nie ma zbytnio do czego się przyczepić bo i kodu mało no ale tak na upartego to bym zmienił to na:

public static bool IsValidBankAccountNumber(string input)
      {
         input = input.Replace(" ", String.Empty);
         if (input.Length != 26 && input.Length != 32)
         {
            return false;
         }

         const int countryCode = 2521;
         string checkSum = input.Substring(0, 2);
         string accountNumber = input.Substring(2);
         string reversedDigits = accountNumber + countryCode + checkSum;
         return ModString(reversedDigits, 97) == 1;
      }

      private static int ModString(string x, int y)
      {
         if (string.IsNullOrEmpty(x))
         {
            return 0;
         }
         string firstDigit = x.Substring(0, x.Length - 1); // first digits
         int lastDigit = int.Parse(x.Substring(x.Length - 1)); // last digit
         return (ModString(firstDigit, y)*10 + lastDigit)%y;
      }

Yubby dibby dibby dibby dibby dibby dibby dum..

Pozostało 580 znaków

2015-01-15 11:22
0

Długość 32 oznacza chyba, że na początku powinien być kod kraju, tymczasem w kodzie założone jest, że kodu kraju nie ma i zawsze jest dokładana jest wartość dla polski.
Długość 26 jest raczej ok.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22, 2015-01-15 11:29
Wiesz co... z tego co pamiętam to liczba 32 wzięła się ze znaków SPACJI. 46 1010 1469 0081 7822 3100 0000 :) 26+ 6 znaków spacji daje 32 :P - talion 2015-02-25 17:54
spacje raczej należałoby wyciąć i dopiero sprawdzać numer. denerwuje mnie gdy bank odrzuca konto jako nieprawidłowe jeśli ze schowka wkleiłem numer bez spacji. - Azarien 2015-02-26 20:41

Pozostało 580 znaków

2015-02-25 17:55
0

Dzięki za odp. Przydatne wskazówki co do jakości kodu :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0