| 10) { return false; } $checksum = 0; $onetwo = 1; for($i = 0; $i < 9; $i++) { $onetwo = $onetwo==1?2:1; $tmp = $pnum[$i] * $onetwo; if($tmp > 9) { $tmp = $tmp - 10 + 1; } $checksum += $tmp; } $checksum %= 10; if($checksum != 0) { $checksum = 10 - $checksum; } return $checksum; } public static function check($pnum, $personal_only = true) { $pnum = self::filter($pnum); $len = strlen($pnum); if($len != 10) { return false; } if($personal_only && ($pnum[2] > 1 || !self::datecheck($pnum)) ) { return false; } return self::checksum($pnum) == $pnum[$len-1]; } public static function datecheck($pnum) { $pnum = self::filter($pnum); $date = substr($pnum, 0, 6); $y = substr($date, 0, 2); $m = substr($date, 2, 2); $d = substr($date, 4, 2); $date = "19$y-$m-$d"; return $date == date('Y-m-d', strtotime($date)); } public static function gender($pnum) { $pnum = self::filter($pnum); if(!self::check($pnum, true)) { return false; } return ($pnum[8] % 2) ? 1 : 2; } public static function ispersonal($pnum) { $pnum = self::filter($pnum); return self::check($pnum, true); } public static function iscompany($pnum) { $pnum = self::filter($pnum); return !($pnum[2] < 2 || !self::check($pnum, false)); } public static function company($pnum) { $pnum = self::filter($pnum); if(!self::iscompany($pnum)) { return false; } switch($pnum[0]) { case 2: return 'OF'; case 5: return 'AB'; case 7: return 'EK'; case 8: return 'IF'; case 9: return 'HB'; default: return true; } } public static function filter($pnum) { $pnum = preg_replace('/[^0-9]/', '', $pnum); if(strlen($pnum) > 10 && $pnum[0] <= 2) { $pnum = substr($pnum, 2); } return $pnum; } } ?> |