Funkcja sprawdza zgodność numerów pesel z zakresu 1800 - 2200 roku (w przybliżeniu).
Weryfikowana jest suma kontrolna oraz logika zapisu samego numeru pesel.
Funkcja zwraca true - jeśli numer pesel jest poprawny, false jeśli błędny.
BOOL CheckPesel(CString a_Pesel)
{
BOOL res=false;
BOOL sumResult = false;
int suma = 0;
int tabSum[] = {1, 3, 7, 9, 1, 3, 7, 9, 1, 3};
CString mDate = "";
if(a_Pesel.GetLength() > 0)
{
for(int i = 0; i < 10; i++)
{
suma += tabSum[i] * stoi(a_Pesel[i]);
}
if ((suma % 10) == 0)
sumResult = ((suma % 10) == stoi(a_Pesel[10]));
else
sumResult = ( (10 - (suma % 10)) == stoi(a_Pesel[10]));
}
if(sumResult){
int year = 0;
int month = 0;
int day = stoi(a_Pesel.Mid(4,2));
if(a_Pesel[2] == '0' || a_Pesel[2] == '1')
{
year = 1900;
month = stoi(a_Pesel[2]) * 10 + stoi(a_Pesel[3]);
}else if (a_Pesel[2] == '2' || a_Pesel[2] == '3')
{
year = 2000;
month = stoi(a_Pesel[2] - 20) * 10 + stoi(a_Pesel[3]);
}else if (a_Pesel[2] == '4' || a_Pesel[2] == '5')
{
year = 2100;
month = stoi(a_Pesel[2] - 40) * 10 + stoi(a_Pesel[3]);
}else if (a_Pesel[2] == '6' || a_Pesel[2] == '7')
{
year = 2200;
month = stoi(a_Pesel[2] - 60) * 10 + stoi(a_Pesel[3]);
}else if (a_Pesel[2] == '8' || a_Pesel[2] == '9')
{
year = 1800;
month = stoi(a_Pesel[2] - 80) * 10 + stoi(a_Pesel[3]);
}
year += stoi(a_Pesel[0]) * 10 + stoi(a_Pesel[1]);
mDate = itos(year) + "-" + itos(month) + "-" + itos(day);
COleDateTime tm;
res=tm.ParseDateTime(mDate);
}else{
AfxMessageBox("Nieprawidłowy numer Pesel");
return false;
}
return res;
}
Brak komentarzy:
Prześlij komentarz