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:

14Apr/100

ArgumentOutOfRangeException : Index was out of range w mapowaniu NHibernate

Może się czasem zdarzyć, że otrzymamy wyjątek od NHibernate i nie wiemy, na czym polega błąd, ponieważ rzucany wyjątek nie ma szczegółowych informacji. Gdy wydaje nam się, że wszystkie mapowania są poprawne , a otrzymujemy poniższy wyjątek, należy upewnić się, czy gdzieś w definicji mapowania nie ma próby podmapowania dwóch właściwości do tej samej kolumny tabeli:

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index.

np.(mapowanie Fluent)

...
Map(e => e.Code, "Code");
Map(e => e.CodeType, "Code");
...