poniedziałek, 2 lipca 2012

Walidacja numeru konta bankowego w c#

Poniżej przedstawiam funkcję walidującą numer konta bankowego zarówno przyjętego w Polsce 26 i 28 znakowy.
Funkcja może zwrócić podany numer w postaci sformatowanej tj ze spacjami.

/// <summary>
/// Walidacja numeru bankowego
/// </summary>
/// <param name="szNR">weryfikowany numer</param>
/// <param name="retFormated">Czy zwracać numer w postaci sformatowanej</param>
/// <returns>true/false</returns>
public static bool ValidateIBAN_NRB(ref string szNR, bool retFormated = true)
{
    bool bResult = false;

    szNR = szNR.Trim()
                .Replace(" ", "")
                .Replace("-", "");
          
    if (szNR.Length == 26 || szNR.Length == 28)
    {
        string nr = szNR;
        if (nr.Length == 26)
        {
            nr = (nr +"PL"+ nr.Substring(0, 2)).Remove(0, 2);
        }
        else
        {
            nr = (nr + nr.Substring(0, 4)).Remove(0, 4);
        }

        nr = nr.Replace("P", "25").Replace("L", "21");

        String nr6 = nr.Substring(0, 6);
        String nr12 = nr.Substring(6, 6);
        String nr18 = nr.Substring(12, 6);
        String nr24 = nr.Substring(18, 6);
        String nr30 = nr.Substring(24);

        int r = Convert.ToInt32(nr6) % 97;
        nr12 = (r > 0 ? r.ToString() : "") + nr12;
        r = Convert.ToInt32(nr12) % 97;
        nr18 = (r > 0 ? r.ToString() : "") + nr18;
        r = Convert.ToInt32(nr18) % 97;
        nr24 = (r > 0 ? r.ToString() : "") + nr24;
        r = Convert.ToInt32(nr24) % 97;
        nr30 = (r > 0 ? r.ToString() : "") + nr30;               

        bResult = (Convert.ToInt32(nr30) % 97 == 1);
    }
    else return false;

    if (bResult && retFormated)
    {
        if (szNR.Length==26)
        {
            szNR = szNR.Insert(22, " ").Insert(18, " ").Insert(14, " ").Insert(10, " ").Insert(6, " ").Insert(2, " ");
        }
        else
        {
            szNR = szNR.Insert(24, " ").Insert(20, " ").Insert(16, " ").Insert(12, " ").Insert(8, " ").Insert(4, " ");
        }
    }

    return bResult;
}

Brak komentarzy:

Prześlij komentarz