Jump to content

Script Validare/verficare Cnp In Php


Recommended Posts

Posted

Scriptuletul afisat mai jos, afiseaza un formular in care introduceti un CNPl, iar acesta este verificat daca este corect sa nu.

Pentru a functiona trebuie sa copiati codul de mai jos, asa cum este, apoi il copiati intr-un fisier, pe care il denumitit validare_cnp.php, spre exemplu.

<?php
/* Nume fisier: validare_cnp.php */
/* Creat de danielplesu [AT] yahoo [DOT] com */
/* Copyright Daniel Plesu 17-06-2008 */
/* Corectat de Birkoff */

// 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']{0};        
   // cifrele 2 si 3 reprezinta anul nasterii
   $cnp['an'] = $cnp['cnp primit']{1}.$cnp['cnp primit']{2};              
   // cifrele 4 si 5 reprezinta luna (nu poate fi decat intre 1 si 12)
   $cnp['luna']    = $cnp['cnp primit']{3}.$cnp['cnp primit']{4};      
   // cifrele 6 si 7 reprezinta ziua (nu poate fi decat intre 1 si 31)
   $cnp['zi']    = $cnp['cnp primit']{5}.$cnp['cnp primit']{6};                                
   // cifrele 8 si 9 reprezinta codul judetului (nu poate fi decat intre 1 si 52)
   $cnp['judet'] = $cnp['cnp primit']{7}.$cnp['cnp primit']{8};                                              
   // 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']{0} * 2 + $cnp['cnp primit']{1} * 7 +
       $cnp['cnp primit']{2} * 9 + $cnp['cnp primit']{3} * 1 + $cnp['cnp primit']{4} * 4 +
       $cnp['cnp primit']{5} * 6 + $cnp['cnp primit']{6} * 3 + $cnp['cnp primit']{7} * 5 +
       $cnp['cnp primit']{8} * 8 + $cnp['cnp primit']{9} * 2 + $cnp['cnp primit']{10} * 7 +
       $cnp['cnp primit']{11} * 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 (! 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']{12})
           || ($cnp['rest'] >= 10 && $cnp['cnp primit']{12} != 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 este valid!<br>'.$cnp;
   }
?>
[/code]

Te-ai inregistrat? Ne-ar placea sa te prezinti.

Cum pot sustine forumul?
Cumpara de la eMag folosind acest link.
--------------------
oG2BN9d.gifse1WdXd.gifQG6MtmI.gifRHYjDzD.gifG5p1wui.gif

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.