Artikel mit ‘Personalausweisnummer’ getagged

Personalausweisnummer überprüfen und auslesen

Dienstag, 28. April 2009

Mit dieser von mir entwickelten Funktion kann man, via PHP, eine deutsche Personalausweisnummer auf ihre Gültigkeit prüfen.
Ist die Personalausweisnummer gültig, erhält man ein Array mit allen Information zu der Person.

// Edit: Habe am 13. Mai 2009 nochmal eine überarbeitete Funktion in diesen Beitrag integriert.

< ?php
/**
 * PASS    : XXXXXXXXXXD << XXXXXXX < XXXXXXX <<<<<<< X
 * FUNCTION: $ID01       << $ID02   < $ID03   <<<<<<< $ID04
 *
 * by Frank Burian, nQuee netappz - http://www.nquee.com
 */
function checkGermanPersonalId($ID01,$ID02,$ID03,$ID04) {
 
	$arrResult = array();
	// Prüfsumme ermitteln
	if (!function_exists('buildChecksum')) {
		function buildChecksum($intID) {
			$intMultiplier = 7;
			$intSum = 0;
			if (strlen($intID) == 11) {
				$intIDLength = 9;
			} elseif (strlen($intID) == 7) {
				$intIDLength = 6;
			} else {
				$intIDLength = strlen($intID);
			}
			for ($a=0; $a<$intIDLength; $a++) {
				$intSign = (integer) substr($intID,$a,1);
				$intTmpSum = ($intSign*$intMultiplier);
				$intSum += (integer) substr($intTmpSum,strlen($intTmpSum)-1,1);
				if ($intMultiplier == 7) {
					$intMultiplier = 3;
				} elseif ($intMultiplier == 3) {
					$intMultiplier = 1;
				} else {
					$intMultiplier = 7;
				}
			}
			return substr($intSum,strlen($intSum)-1,1);
		}
	}
	// Erste ID prüfen
	if (strlen($ID01) != 11) {
		return false;
	}
	if (buildChecksum($ID01) != substr($ID01,9,1)) {
		return false;
	}
	$arrResult['firstLocation'] = substr($ID01,0,4);
	$arrResult['origin'] = strtoupper($ID01{10});
	$arrResult['isGerman'] = ($arrResult['origin'] == 'D') ? true : false;
	// Zweite ID prüfen
	if (strlen($ID02) != 7) {
		return false;
	}
	if (buildChecksum($ID02) != $ID02{6}) {
		return false;
	}
	$arrResult['birthday']['day'] = $ID02{4}.$ID02{5};
	$arrResult['birthday']['month'] = $ID02{2}.$ID02{3};
	$arrResult['birthday']['year'] = $ID02{0}.$ID02{1};
	$arrResult['age'] = intval((mktime(0,0,0,date("m"),date("d"),date("Y")) -
						mktime(0,0,0,$arrResult['birthday']['month'],$arrResult['birthday']['day'],$arrResult['birthday']['year']))
						/ (3600 * 24 * 365));
	$arrResult['isAdult'] = ($arrResult['age'] >= 18) ? true : false;
 
	// Dritte ID prüfen
	if (strlen($ID03) != 7) {
		return false;
	}
	if (buildChecksum($ID03) != $ID03{6}) {
		return false;
	}
	$arrResult['expiration']['day'] = $ID03{4}.$ID03{5};
	$arrResult['expiration']['month'] = $ID03{2}.$ID03{3};
	$arrResult['expiration']['year'] = $ID03{0}.$ID03{1};
	// Vierte ID prüfen
	$intCompletePersonalId = substr($ID01,0,10).$ID02.$ID03;
	if (buildChecksum($intCompletePersonalId) != $ID04) {
		return false;
	}
	return $arrResult;
}
// Aufruf:
print_r(checkGermanPersonalId('6127057594D','8703189','1911149','2'));
?>