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:
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"); ...