Ocena użytkownikóww: ***** / 9
Nadesłany przez Mariusz Tomaszewski, 04 marca 2012 02:13
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.dowod_osobisty.php:
<?php
/**
program do walidacji nr dowodu osobistego
@author Mariusz Tomaszewski
@version 1.0
*/
/**
Funkcja do walidacji nr dowodu osobistego
@param string $_identity_card nr dowodu osobistego
@return boolean flaga czy nr dowodu jest poprawny czy nie
*/
function check_identity_card_number($_identity_card){
//sprawdz dlugosc podanego numeru
if(strlen($_identity_card)!=9)
return false;
$identity_card = strtoupper($_identity_card);
//tablica wartosci znakow
$def_value = array('0'=>0,'1'=>1,'2'=>2,'3'=>3,'4'=>4,'5'=>5,'6'=>6,'7'=>7,'8'=>8,'9'=>9,
'A'=>10, 'B'=>11, 'C'=>12, 'D'=>13, 'E'=>14, 'F'=>15, 'G'=>16, 'H'=>17, 'I'=>18, 'J'=>19,
'K'=>20, 'L'=>21, 'M'=>22, 'N'=>23, 'O'=>24, 'P'=>25, 'Q'=>26, 'R'=>27, 'S'=>28, 'T'=>29,
'U'=>30, 'V'=>31, 'W'=>32, 'X'=>33, 'Y'=>34, 'Z'=>35);
//tablica wag
$importance = array(7, 3, 1, 0, 7, 3, 1, 7, 3);
//oblicz sume kontrolna
$identity_card_sum = 0;
for($i=0;$i<9;$i++){
if($i<3 && $def_value[$identity_card[$i]]<10)
return false;
elseif($i>2 && $def_value[$identity_card[$i]]>9)
return false;
$identity_card_sum += ((int)$def_value[$identity_card[$i]]) * $importance[$i];
}
//sprawdz wartosc sumy kontrolnej
if($identity_card_sum%10 != $identity_card[3] )
return false;
return true;
}
?>