inca un program inutil care a aplicat o simpla formula matematica gasita pe zeci de site-uri
@dallass: algoritmul e asta:
sa inventez un CNP, de ex: 1781231123450
asta inseamna barbat (nascut inainte de 2000), anul 1978, luna decembrie, ziua 31.
Cod judet: 12
Cod: 345
Cod verificare: 0
Deci, cnp[0] = 1, cnp[1] = 7, cnp[2] = 8... si tot asa (cifra dintre paranteze reprezinta numarul de ordine al cifrei -1, deoarece numaratoarea incepe de la 0 si nu de la 1)
Validarea se face asa:
cnp[0] * 2 + cnp[1] * 7 + cnp[2] * 9 + cnp[3] * 1 + cnp[4] * 4 + cnp[5] * 6 + cnp[6] * 3 + cnp[7] * 5 + cnp[8] * 8 + cnp[9] * 2 + cnp[10] * 7 + cnp[11] * 9
ultima cifra este pentru validarea cnp-ului, rolul ei il explic mai jos.
Deci calculul de mai sus inseamna:
1 * 2 + 7 * 7 + 8 * 9 + 1 * 1 + 2 * 4 + 3 * 6 + 1 * 3 + 1 * 5 + 2 * 8 + 3 * 2 + 4 * 7 + 5 * 9 =
2 + 49 + 72 + 1 + 8 + 18 + 3 + 5 + 16 + 6 + 28 + 45
= 253
Din rezultat se calculeaza restul impartirii la 11:
253 %11 = 0
exista 2 conditii pt a valida cnp-ul, oricare dintre ele intoarce adevarat:
1) daca restul este mai mic decat 10 si este egal cu ultima cifra (cnp[12])
2) daca restul este 10 si ultima cifra este 1
In cazul nostru e valabila conditia a, deci este un cnp valid.
ps: programul lui Panthera este gresit
ps2:
http://forum.softpedia.com/index.php?showtopic=16864 pt varianta pascal & fox