Radosław Piątek napisał/a na Merytorium.pl dnia 2004-06-27 11:40:54:
				Mam nadzieje ze komus sie to przyda ... 
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