walidacja numeru konta bankowego

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

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

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

0

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

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