poniedziałek, 2 lipca 2012

Walidacja numeru Dowodu Osobistego w c#

Funkcja walidująca numer dowodu osobistego w c# wraz z formatowaniem.
Funkcja oparta o sumę kontrolną

/// <summary>
/// Weryfikacja Nr Dowowdu Osobistego
/// </summary>
/// <param name="szNR">Nr Dowodu</param>
/// <param name="retFormated">Czy zwracać numer w postaci sformatowanej</param>
/// <returns>true/false</returns>
public static bool ValidateDO(ref string szNR, bool retFormated = true)
{
    byte[] tab = new byte[9] { 7, 3, 1, 9, 7, 3, 1, 7, 3 };
    byte[] tablicz = new byte[] { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 };
          
    bool bResult = false;
    int sumcontrol = 0;
    int sum = 0;

    szNR = szNR.Trim().Replace(" ", "");
           
    if (szNR.Length == 9)
    {               
        byte b;
               
        for (int i = 0; i < 3; i++)
        {
            b = Convert.ToByte(szNR[i]);
            if (b < 65 || b > 90) return false;
        }
        for (int i = 3; i < 9; i++)
        {
            b = Convert.ToByte(szNR[i]);
            if (b < 48 || b > 57) return false;
        }
               
        sumcontrol = Convert.ToInt32(szNR[3].ToString());

        for (int i = 0; i < 9; i++)
        {
            if (i < 3)
            {
                sum += (Convert.ToByte(szNR[i]) - 55) * tab[i];
            }
            else
            {
                sum += Convert.ToInt32(szNR[i].ToString()) * tab[i];
            }
        }

        bResult = ((sum % 10) == 0);

    }
    else return false;

    if (bResult && retFormated)
    {
        szNR = szNR.Insert(3, " ");                               
    }

    return bResult;
}

Brak komentarzy:

Prześlij komentarz