Kamil Kliczbor @ asptip.net

14Apr/100

Walidator numeru (poprawność numeru) PESEL

Każdy obywatel Polski posiada przypisany numer PESEL, który jest akronimem od "Powszechny Elektroniczny System Ewidencji Ludności". O historii i opisie tego numeru można poczytać np. na stronie wikipedii.
W poniższym kawałku kodu przedstawiony został sposób walidacji tego numeru. Założeniem jest to, że na wejściu pobierany jest ciąg znaków, a na wyjściu zwracana wartość logiczna określa, czy PESEL jest poprawny czy nie. Poniższa metoda została użyta jako extension metod, w związku z czym można ja użyć bezpośrednio na każdym łańcuchu tekstowym.

public static bool IsPeselValid(this string candidate)
{
    if (string.IsNullOrEmpty(candidate) || candidate.Length != 11) return false;

    int[] weights = { 1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1 };

    long peselNumber;
    bool allCharsAreDigit = long.TryParse(candidate, out peselNumber);
    if (!allCharsAreDigit) return false;

    int sum = 0;
    for (int i = 0; i < weights.Length; i++)
    {
        sum += int.Parse(candidate[i].ToString()) * weights[i];
    }

    return (sum % 10) == 0;
}

Więcej w temacie można poczytać na poniższych stronach: