Walidacja nip, pesel, itp ...

czwartek, 1 styczeń 70, 01:00

Ciekawa dyskusja z załączonym skryptem do walidacji danych PESELu i NIPu w forumalarzach zgłoszeniowych.

Radosław Piątek napisał/a na Merytorium.pl dnia 2004-06-27 11:40:54:

Mam nadzieje ze komus sie to przyda ... Puszczenie oczka
Radek



<?

function suma_cyfr($ii) {
return ($ii % 10) + floor($ii/10);
}

function compactString($dane) {
$inpstr = $dane;
$inpstl = strlen($inpstr);

for($i=0;$i<$inpstl;$i++) {
$znak = substr($inpstr, $i, 1);

if (($znak < '0' || $znak > '9') && ($znak != 'X') && ($znak != 'x')) {
$inpstr = substr($inpstr,0,$i) . substr($inpstr,$i+1, $inpstl);
$i--;
}
}
return $inpstr;
}

function verifyPESEL($numer, $dane) {

$rodzajNum = $numer;
$tempStr = $dane;

$nazwy = array ('PESEL','REGON','NIP','KONTO','ISBN','CCARD');
$dlug = array ( 11, 9,10, 8,10,16 );
$mody = array ( 10,11,11,10,11,10 );
$wagi = array
( array( 1,3,7,9,1, 3,7,9,1,3, 0,0,0,0,0,0), // PESEL
array( 8,9,2,3,4, 5,6,7,0,0, 0,0,0,0,0,0), // REGON
array( 6,5,7,2,3, 4,5,6,7,0, 0,0,0,0,0,0), // NIP
array( 7,1,3,9,7,11,3,0,0,0, 0,0,0,0,0,0), // KONTO
array(10,9,8,7,6, 5,4,3,2,0, 0,0,0,0,0,0), // ISBN
array( 2,1,2,1,2, 1,2,1,2,1, 2,1,2,1,2,1) // CCARD
);

// NIP 6 5 7 2 3 4 5 6 7 MOD 11 plus ostatnia cyfra
// REGON 8 9 2 3 4 5 6 7 MOD 11 plus ostatnia cyfra
// BANKI 7 1 3 9 7 11 3 MOD 10 plus ostatnia cyfra
// ISBN 10 9 8 7 6 5 4 3 2 MOD 11

$cyfry = array (0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,0,0);

if ($tempStr != '') {
$tempStr = compactString($tempStr);
if ($rodzajNum == 5) {
$tempStr = "0000000000" . $tempStr;
$L = strlen($tempStr);
$tempStr = substr($tempStr,$L-16,$L);
}
$L = strlen($tempStr);
for ($i=0; $i<$L; $i++) {
$znak = substr($tempStr, $i ,1);
if ($znak == 'X') { $cyfry[$i] = 10; } else {$cyfry[$i] = intval($znak);};
}
if (($L == $dlug[$rodzajNum]) || ($rodzajNum == 5)) {
$suma = 0;
if ($rodzajNum == 5) {
for ($i=0; $i<$L-1; $i++) {
$suma = $suma + suma_cyfr($wagi[$rodzajNum][$i]*$cyfry[$i]);
}
} else {
for ($i=0; $i<$L-1; $i++) {
$suma = $suma + ($wagi[$rodzajNum][$i]*$cyfry[$i]);
}
}
$suma = $suma % $mody[$rodzajNum];
if ($rodzajNum == 0) $suma = (10-$suma) % 10; // PESEL
if ($rodzajNum == 4) $suma = (11-$suma) % 11; // ISBN
if ($rodzajNum == 5) $suma = (10-$suma) % 10; // CCARD
if ($suma == $cyfry[$L-1]) {$wynikB = ' = Dobry';} else {$wynikB = ' = Zly';}
$wynik = $tempStr . $wynikB;
} else {
$wynikB = false;
if($L<$dlug[$rodzajNum]) {$alert = ' zbyt malo';} else {$alert = ' za duzo';}
$wynik = $tempStr . $alert . ' cyfr';
}
} else {$wynik = ' brak danych';}
return $wynik;
}


echo verifyPESEL(2, 'numer nipu') . ' //NIP';
echo '<br>';
echo verifyPESEL(0, 'numer pesel') . ' //PESEL';
echo '<br>';
echo verifyPESEL(4, '83-86718-82-X') . ' //ISBN';
?>
Czytaj na Forum Merytorium.pl

Następne

E-card vs. Polcard