👤

Informatyka C++: Zrób tak, aby wygenerowało pierwsze 6 cyfr numeru PESEL na podstawie daty urodzenia

Odpowiedź :

Odpowiedź

Załączniki:

  1. Tabela pokazująca kodowanie cyfry miesięcy w zależności od roku urodzenia.
  2. Program który napisałam w C++ pod Visual Studio 2019 (Windows).
  3. Ten sam program w C++ w wersji standardowej z objaśnieniami zamieszczonymi poniżej.
  4. Program w C# pod Visual Studio i replit (dotnetfiddle wymaga zmian).
  5. Przykładowe wyniki uzyskane na platformie replit. (Tam najłatwiej było mi powtórzać wykonanie już skompilowanego kodu).

Objaśnienia do 3. załącznika:

  • tak jak jest napisany bez żadnych zmian zadziała pod replit skompilowany przez kompilator clang, zadziała pod Linuxem skompilowany przez g++, itd.;
  • aby zadziałał pod onlinegdb oraz cpp .sh należy użyć nazw zmiennych zapisanych tylko znakami ASCII (nie można użyć polskich liter);
  • aby zadziałał pod CodeBlocks pod Windows nazwy zmiennych oraz komunikaty z printf muszą być zapisanych tylko znakami ASCII (nie można użyć polskich liter).

Już kiedyś wspomniałam jak ważne jest aby pytający podawali nazwę środowiska pod którym program ma działać. Chociaż zwykle się cieszę gdy jest chociaż podana nazwa języka programowania. :)

Wyjaśnienie

Algorytm tworzenia 6 pierwszych cyfr jest następujący:

Ostatnie 2 cyfry czterocyfrowego roku urodzenia

2 cyfry miesiąca urodzenia zmodyfikowane w zależności od roku urodzenia:

  •    dla lat 1800‒1899 dodane 80,
  •    dla lat 1900‒1999 dodane 0 (czyli bez zmiany),
  •    dla lat 2000‒2099 dodane 20,
  •    dla lat 2100‒2199 dodane 40,
  •    dla lat 2200‒2299 dodane 60.

2 cyfry dnia urodzenia, czyli zapisane z zerem dla dni od 1 do 9.

Program w ogóle nie sprawdza poprawności wprowadzanych danych. W tym konkretnym przypadku program byłby sporo dłuższy, bo jest dużo do sprawdzania:

  • poprawność wprowadzenia formatu rrrr-mm-dd,
  • zakres lat,
  • zakres miesięcy,
  • zakres dni (różny dla różnych miesięcy i lat...).
Zobacz obrazek 0AB
Zobacz obrazek 0AB
Zobacz obrazek 0AB
Zobacz obrazek 0AB
Zobacz obrazek 0AB