Informatică, întrebare adresată de criss262006, 8 ani în urmă

Cum se poate verifica validitatea unui CNP prin programare folosind o functie?


alecsapostol96: vrei sa il validezi cu unul deja existent, sau vrei sa validezi formatul?
criss262006: doresc scrierea unui program in C++ care sa verifice validitatea unui CNP
criss262006: folosind o functie
criss262006: int test CNP(char cnp[])

Răspunsuri la întrebare

Răspuns de howardax
2

Simplu, este un format stabilit de stat și are următoarele restricții:

  • Are 13 cifre;
  • Prima cifră poate fi una din următoarele:

1 / 2 – bărbat/femeie născut(ă) între 1 ianuarie 1900 si 31 decembrie 1999

3 / 4 – bărbat/femeie născut(ă) între 1 ianuarie 1800 si 31 decembrie 1899

5 / 6 – bărbat/femeie născut(ă) între 1 ianuarie 2000 si 31 decembrie 2099

7 / 8 – pentru persoanele străine rezidente în România.

În plus 9 – pentru alt tip de persoane străine.

  • A doua și a treia cifră este un număr format din 2 cifre si reprezintă ultimele 2 cifre din anul nașterii:

Exemplu: Pentru anul 1994, va fi 94, pentru 2004 - 04, ș.a.m.d.

  • A patra și a cincea cifră este un număr format din 2 cifre și reprezintă luna nașterii persoanei:

Nu cred că e nevoie de explicație, doar că aici va fi impusă restricția ca a treia cifră să fie mai mică de 1 și a patra cifră mai mică de 9, iar numărul în sine să fie mai mic sau egal cu 12, deoarece avem doar 12 luni.

  • A șasea și a șaptea cifră este un număr format din 2 cifre și reprezintă ziua nașterii în format de 2 cifre:

Nici aici nu cred că e nevoie de explicație, voi spune doar de restricția că data trebuie fie validă pentru luna indicată anterior, adică pentru luna decembrie numărul maxim va fi 31, pentru luna aprilie - 30 și tot așa.

Totodată dacă ziua de naștere este formată doar dintr-o cifră, se va scrie cu 0 în față, de exemplu dacă persoana e născută pe 1 ianuarie, se va scrie 01 în cnp.

  • A opta și a noua cifră este un numar format din două cifre și este reprezentat de codul județului sau sectorului în care s-a născut persoana ori în care avea domiciliul sau resedința în momentul acordării C.N.P.:

De exemplu, pentru Buzău acest numar este 10. Pentru București, codul este un număr din intervalul 41 si 46 și reprezintă sectorul în care s-a născut acea persoana.

Codurile județelor sunt în ordinea alfabetică a acestora, cu unele excepții (Giurgiu si Călărași).

  • A zecea, unsprezecea și a douăsprezecea cifră este un număr format din trei cifre din intervalul 001 – 999:

Numerele din acest interval se împart pe judeţe, birourilor de Evidenţă a Populaţiei, astfel încât un anumit număr din acel interval să fie alocat unei singure persoane într-o anumită zi. Deci restricția e ca numărul să nu fie 000.

  • A treisprezecea cifră este cifra de control și este legată de celelalte 12 cifre anterior ei:

Cifra de control este calculată după cum urmează: fiecare cifră din C.N.P. este înmulțită cu cifra de pe aceeași poziție din numărul 279146358279; rezultatele sunt însumate, iar rezultatul final este împărțit cu rest la 11. Dacă restul este 10, atunci cifra de control este 1, altfel cifra de control este egală cu restul .

Spre exemplu: 197121040555=(1*2)+(9*7)+(7*9)+(1*1)+(2*4)+(1*6)+(0*3)+(4*5)+(0*8)+(5*2)+(5*7)+(5*9)=253

253/11=23 rest 0, deci restul fiind 0, ultima cifră a CNP-ului va fi 0.

Acum ce e legat de programare e simplu, citești CNP-ul, și verifici prin condiții toate aceste cifre, pas cu pas.

Alte întrebări interesante