[Tutorial PHP]Verificare CNP (cod numeric personal)

#1
Nume Tutorial:Verificare CNP (cod numeric personal)
Descriere:Verificare CNP (cod numeric personal)
Download:Nu necesita
Autor:Anonim
Sursa (Link-ul oficial):
tutorialeonline
Propria parere:Util.
Tutorialul:
Codul de mai jos afişează un formular în care se introduce Codul Numeric Personal şi se verifică dacă este corect sau nu. În cazul în care nu este corect se vor afişa mesajele de eroare şi se va cere din nou CNP-ul.

Cod:

Cod: Selectaţi tot

 <?php
 /* Nume fisier: validare_cnp.php */
 /* Creat de danielplesu [AT] yahoo [DOT] com */
 /* Copyright Daniel Plesu 17-06-2008 */
 /* Corectat de Birkoff - www.tutoriale    far  php   ro */
 
 // functia care afiseaza formularul
 function afisare_form_cnp($stare = 1)
 {
 //daca valoarea variabilei $stare este 1 atunci se afiseaza campul cnp - gol
 if ($stare == 1)
 $cnp = ''; 
 
 // daca valoarea variabilei $stare este diferita de 1 atunci se preiau 
 // mai intai datele trimise anterior prin POST din formular 
 // si se afiseaza formularul cu valorile primite.
 else
 $cnp = $_POST['cnp']; 
 
 // se genereaza variabila cu tabelul care contine formularul                  
 $form = '<div align="center">
 <form method="post" action="'.$_SERVER['PHP_SELF'].'">
 <input name="cnp" type="text" value="'.$cnp.'" size="20">
 <input type="submit" name="Submit" value="Verifica CNP!" size="25"><br>
 </form>
 </div>';
 return $form;
 
 }
 
 // functia care preia datele din formular si returneaza datele primite
 function preluare_date($de_unde = 1)
 {
 
 switch ($de_unde)
 {
 default:
 case '1': // din post
 $cnp['cnp primit'] = trim($_POST['cnp']);
 break;
 case '2': // din get
 $cnp['cnp primit'] = trim($_GET['cnp']);
 break;
 }
 
 return $cnp['cnp primit'];
 }
 
 // functia care valideaza datele primite si returneaza erorile daca sunt
 function validare_cnp($cnp_primit)
 {
 
 $cnp['cnp primit'] = $cnp_primit;
 // prima cifra din cnp reprezinta sexul si nu poate fi decat 1,2,5,6 (pentru cetatenii romani) 
 // 1, 2 pentru cei nascuti intre anii 1900 si 1999
 // 5, 6 pentru cei nsacuti dupa anul 2000
 $cnp['sex'] = $cnp['cnp primit'];        
 // cifrele 2 si 3 reprezinta anul nasterii
 $cnp['an'] = $cnp['cnp primit'].$cnp['cnp primit'];              
 // cifrele 4 si 5 reprezinta luna (nu poate fi decat intre 1 si 12) 
 $cnp['luna']    = $cnp['cnp primit'].$cnp['cnp primit'];      
 // cifrele 6 si 7 reprezinta ziua (nu poate fi decat intre 1 si 31)
 $cnp['zi']    = $cnp['cnp primit'].$cnp['cnp primit'];                                 
 // cifrele 8 si 9 reprezinta codul judetului (nu poate fi decat intre 1 si 52)
 $cnp['judet'] = $cnp['cnp primit'].$cnp['cnp primit'];                                             
 // cifrele 10,11,12 reprezinta un nr. poate fi intre 001 si 999. 
 // Numerele din acest interval se impart pe judete, 
 // birourilor de evidenta a populatiei, astfel inct un anumit numar din acel 
 // interval sa fie alocat unei singure persoane intr-o anumita zi.
 
 // cifra 13 reprezinta cifra de control aflata in relatie cu 
 // toate celelate 12 cifre ale CNP-ului.
 // fiecare cifra din CNP este inmultita cu cifra de pe aceeasi pozitie 
 // din numarul 279146358279; rezultatele sunt insumate, 
 // iar rezultatul final este impartit cu rest la 11. Daca restul este 10, 
 // atunci cifra de control este 1, altfel cifra de control este egala cu restul.
 $cnp['suma de control'] = $cnp['cnp primit'] * 2 + $cnp['cnp primit'] * 7 + 
 $cnp['cnp primit'] * 9 + $cnp['cnp primit'] * 1 + $cnp['cnp primit'] * 4 + 
 $cnp['cnp primit'] * 6 + $cnp['cnp primit'] * 3 + $cnp['cnp primit'] * 5 + 
 $cnp['cnp primit'] * 8 + $cnp['cnp primit'] * 2 + $cnp['cnp primit'] * 7 + 
 $cnp['cnp primit'] * 9;
 $cnp['rest'] = fmod($cnp['suma de control'], 11);
 // setarea variabilei de erori, in cazul in care nu exista erori 
 // sa returneze un array gol (altfel ar da eroare)
 $erori = array();
 
 if (empty($cnp['cnp primit']))
 $erori[] = 'Campul CNP este gol!<br>';
 
 else
 {
 if (! is_numeric($cnp['cnp primit']))
 $erori[] = 'CNP-ul este format doar din cifre!<br>';
 
 if (strlen($cnp['cnp primit']) != 13)
 {
 $cifre = strlen($cnp['cnp primit']);
 $erori[] = 'CNP-ul trebuie sa aiba 13 numere, cel introdus are doar '.$cifre.' !<br>';
 }
 if($cnp['sex'] != 1 && $cnp['sex'] != 2 && $cnp['sex'] != 5 && $cnp['sex'] != 6)
 $erori[] = 'Prima cifra din CNP - eronata!<br>';
 
 if($cnp['luna'] > 12 || $cnp['luna'] == 0 )
 $erori[] = 'Luna este incorecta!<br>';
 
 if($cnp['zi'] > 31 || $cnp['zi'] == 0)
 $erori[] = 'Ziua este incorecta!<br>';
 
 if ( is_numeric($cnp['luna']) && is_numeric($cnp['zi']) && is_numeric($cnp['an']) )
 {
 if (! checkdate($cnp['luna'],$cnp['zi'],$cnp['an']))
 $erori[] = 'Data de nastere specificata este incorecta<br>';
 }
 
 if($cnp['judet'] > 52 || $cnp['judet'] == 0)
 $erori[] = 'Codul judetului este eronat!<br>';
 
 if (($cnp['rest'] < 10 && $cnp['rest'] != $cnp['cnp primit']) 
 || ($cnp['rest'] >= 10 && $cnp['cnp primit'] != 1))
 $erori[] = 'Cifra de control este gresita! (CNP-ul nu este valid)<br>';
 }
 
 return $erori;
 }
 
 // de aici incepe codul propriuzis
 
 // daca utilizatorul este pentru prima data pe pagina i se afiseaza campul cnp - gol 
 if (!isset($_POST['cnp']))
 echo afisare_form_cnp(1);
 
 // daca s-a trimis ceva prin post, se preiau datele si se verifica
 else
 {
 // preluare date din post
 $cnp = preluare_date(1); 
 // verificare de erori (se primeste un array cu mesajele de erori sau un array gol daca nu sunt erori)
 $erori = validare_cnp($cnp);
 // daca sunt erori
 if (count($erori)) // daca array-ul are macar 1 mesaj de eroare
 {
 echo implode(' ', $erori); // se transforma arayul in sir si se afiseaza
 echo afisare_form_cnp(0); // se afiseaza formularul cu datele deja introduse
 }
 else // daca nu sunt erori
 echo 'Felicitari! CNP-ul e valid!<br>'.$cnp;
 }
 ?>
N-am cerut la nimeni niciodata,
Chiar de-a fost sa rabd, in viata mea.
Am dat totul fara nici o plata,
Nevoind nimic sa mi se dea.

@Virgil Carianopol
Vezi-ti de treaba si retine:
"E treaba ta sa spui ce vrei si sa nu conteze pentru nimeni".

@Kazi Ploae

Înapoi la “Tutoriale PHP”

Cine este conectat

Utilizatori răsfoind acest forum: Niciun utilizator înregistrat și 0 vizitatori