Program sprawdzający pesel

0

Witam, od dłuższego czasu próbuję napisać program który będzie sprawdzał poprawność podanego PESELu, mam problem z funkcją która będzie sprawdzała czy w ciągu znaków są same cyfry. Poniżej to co udało mi się do tej pory wykombinować

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string pesel;
    cin >> pesel;


     for (int i=0; i<=11; i++)
    {
        if(pesel.at(i)!=('1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9'||'0'))
            {
                cout << "Wprowadziłes inny znak niz cyfre ";
            }
    }

}

Niestety nawet jeśli podam same cyfry to za każdym razem program pisze mi że ich nie wprowadziłem, jak zmienić kod żebym uzyskał porządany efekt?

4
pesel.at(i)!=('1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9'||'0')

fajnie by było, ale tak to nie działa. Musisz porównać z każdym znakiem z osobna, albo wygłówkować, że w nagłówku <cctype> jest funkcja isdigit()
Ponadto:

 for (int i=0; i<=11; i++)

Ta pętla zrobi 12 przebiegów, użyj < zamiast <=

3

Dodatkowo PESEL ma sumę kontrolną liczoną jako suma ważona poszczególnych pozycji modulo 10. ( https://pl.wikipedia.org/wiki/PESEL ) warto ją sprawdzać.

2

Regex sprawdzający czy mamy jedenaście cyfr:
https://regex101.com/r/vWuXOo/1
A dalej, powyżej jest podlinkowany artukuł z wiki, do roboty!

1

Regex na to tutaj to masakra, biorąc pod uwagę wygodę ich używania w C++ :​P

To to, możemy załatwić bez regexów: https://stackoverflow.com/a/8889045

0

Cyfra kontrolna i sprawdzanie poprawności numeru
Jedenasta cyfra jest cyfrą kontrolną, służącą do wychwytywania przekłamań numeru. Jest ona generowana na podstawie pierwszych dziesięciu cyfr. Aby sprawdzić czy dany numer PESEL jest >prawidłowy, należy, zakładając, że litery a-j to kolejne cyfry numeru od lewej, obliczyć wyrażenie:
9×a + 7×b + 3×c + 1×d + 9×e + 7×f + 3×g + 1×h + 9×i + 7×j
Jeżeli ostatnia cyfra otrzymanego wyniku nie jest równa cyfrze kontrolnej, to znaczy, że numer zawiera błąd[18].
Przykład dla numeru PESEL 44051401358:
9×4 + 7×4 + 3×0 + 1×5 + 9×1 + 7×4 + 3×0 + 1×1 + 9×3 + 7×5 = 169
Wyznaczamy resztę z dzielenia sumy przez 10:
169:10 = 16 reszta = 9
Wynik 9 nie jest równy ostatniej cyfrze numeru PESEL, czyli 8, więc numer jest błędny.
Metoda równoważna
Powyższa metoda sprowadza się do obliczenia sumy:
1×a + 3×b + 7×c + 9×d + 1×e + 3×f + 7×g + 9×h + 1×i + 3×j + 1×k
(gdzie litery oznaczają kolejne cyfry numeru), a następnie sprawdzenia czy reszta z dzielenia przez 10 jest zerem. Innymi słowy, jeśli ostatnia cyfra otrzymanej sumy jest zerem, to numer PESEL jest >formalnie poprawny, w przeciwnym razie numer jest błędny.

Czyli wszystko jasne, łatwo sprawdzamy poprawność sumą kontrolną.

1 użytkowników online, w tym zalogowanych: 0, gości: 1