![]() |
Pe HaiSaRadem.ro vei gasi bancuri, glume, imagini, video, fun, bancuri online, bancuri tari, imagini haioase, videoclipuri haioase, distractie online. Nu ne crede pe cuvant, intra pe HaiSaRadem.ro ca sa te convingi. |
Un CNP este alcatuit astfel :
|S| |AA| |LL| |ZZ| |JJ| |ZZZ| |C|
|_| |__| |__| |__| |__| |___| |_|
: : : : : : :
: : : : : : :
: : : : : : --> Cifra de control
: : : : : :
: : : : : --> Numarul de ordine atribuit persoanei
: : : : :
: : : : --> Codul judetului
: : : :
: : : --> Ziua nasterii
: : :
: : --> Luna nasterii
: :
: --> Anul nasterii
:
--> Cifra sexului (M/F) pentru:
1/2 - cetateni romani nascuti intre 1 ian 1900 si 31 dec 1999
3/4 - cetateni romani nascuti intre 1 ian 1800 si 31 dec 1899
5/6 - cetateni romani nascuti intre 1 ian 2000 si 31 dec 2099
7/8 - rezidenti
Persoanele de cetatenie straina se identifica cu cifra "9"
Pas preliminar: Se testeaza daca codul respecta formatul unui cod CNP. Adica prima cifra sa fie cuprinsa in intervalul 1 - 6 sau sa fie 9 pentru straini. Urmatoarele sase cifre trebuie sa constituie o data calendaristica valida in formatul AALLZZ.
Pas 1: Se foloseste cheia de testare "279146358279". Primele douasprezece cifre se inmultesc pe rand de la stanga spre dreapta cu cifra corespunzatoare din cheia de testare.
Pas 2: Cele douasprezece produse obtinute se aduna si suma obtinuta se imparte la 11.
Pentru un CNP valid cifra de control va trebui sa coincida cu cifra de pe pozitia treisprezece din CNP-ul initial.
#include
#include
#include
int validare(char *cnp)
{
int k[12]={2,7,9,1,4,6,3,5,8,2,7,9};//cheia de testeare
int s=0;
for(int i=0;i<12;i++)
{
s=(s+(cnp[i]-'0')*k[i])%11;
}
if(s==10)
s=1;
if(s==(cnp[12]-'0'))
return 1;
else
return 0;
}
int an(char *cnp)
{
int a;
a=(cnp[1]-'0')*10;
a+=(cnp[2]-'0');
if(cnp[0]=='1' || cnp[0]=='2')
a+=1900;
if(cnp[0]=='3' || cnp[0]=='4')
a+=1800;
if(cnp[0]=='5' || cnp[0]=='6')
a+=2000;
return a;
}
int luna(char *cnp)
{
int l;
l=(cnp[3]-'0')*10;
l+=(cnp[4]-'0');
return l;
}
int ziua(char *cnp)
{
int z;
z=(cnp[5]-'0')*10;
z+=(cnp[6]-'0');
return z;
}
int lungime(char *cnp)
{
int i;
for(i=0;cnp[i]!=NULL;i++);
return i;
}
char* judet(char *cnp)
{
char *lista[52]={"Alba","Arad","Arges","Bacau","Bihor","Bistrita-Nasaud","Botosani","Brasov","Braila","Buzau","Caras-Severin","Cluj","Constanta","Covasna","Dambovita","Dolj","Galati","Gorj","Harghita","Hunedoara","Ialomita","Iasi","Ilfov","Maramures","Mehedinti","Mures","Neamt","Olt","Prahova","Satu Mare","Salaj","Sibiu","Suceava","Teleorman","Timis","Tulcea","Vaslui","Valcea","Vrancea","Bucuresti","Bucuresti S.1","Bucureste S.2","Bucureste S.3","Bucureste S.4","Bucureste S.5","Bucureste S.6","Calarasi","Giurgiu"};
int jud;
jud=(cnp[7]-'0')*10;
jud+=(cnp[8]-'0');
return lista[jud-1];
}
char* sex(char *cnp)
{
if((cnp[0]-'0')%2==1)
return "masculin";
else
return "feminin";
}
int cifre(char *cnp)
{
int i;
for(i=0;cnp[i]!=NULL;i++)
if(cnp[i]<'0' || cnp[i]>'9')
return 0;
return 1;
}
int data_valida(char *cnp)
{
int a,z,l;
a=an(cnp);
z=ziua(cnp);
l=luna(cnp);
if(a%4==0)
if((z-(a%4==0))>28 && l==2)
return 0;
else
{
if(l==8 && z>31)
return 0;
else
if(z>(l%2==0)+30)
return 0;
else
return 1;
}
}
int judet_valid(char *cnp)
{
int j;
j=(cnp[7]-'0')*10;
j+=(cnp[8]-'0');
return j;
}
int preliminar(char *cnp)
{
if(cifre(cnp) && data_valida(cnp) && judet_valid(cnp) && lungime(cnp)==13)
return 1;
else
return 0;
}
void check_num(int nr)
{
if(nr<10)
cout<<"0";
}
void main()
{
char *cnp;
cout<<"\nintroduce-ti CNP-ul:";gets(cnp);
if(preliminar(cnp))
{
cout<<"\ndata nasteri: ";check_num(ziua(cnp));cout<<ziua(cnp);
cout<<":";check_num(luna(cnp));cout<<luna(cnp);
cout<<":"<<an(cnp);
cout<<"\njudetul:"<<judet(cnp);
cout<<"\nsex:"<<sex(cnp);
if(validare(cnp))
cout<<"\nacest CNP este valid";
else
cout<<"\nacest CNP nu este valid";
}
else
cout<<"\nCNP introdus gresit";
getch();
}