PHP: Deutsche Personalausweisnummer generieren

Mit dieser Funktion können Sie eine zufällige deutsche Personalausweisnummer generieren lassen.
Als Ergebnis erhält man ein Array mit den 4 Positionen der Personalausweisnummer.

Mit der Funktion aus dem Beitrag vom 28. April 2009 können Sie anschließend die generierte Personalausweisnummer wieder auslesen.

Diese Funktion darf nur für Testzwecke verwendet werden.
Ein Missbrauch ist ausdrücklich untersagt!

Einstieg in PHP 7 und MySQL
/**
 * Eine deutsche Personalausweisnummer generiern
 * Darf nur für Testzwecke genutzt werden!!!
 * Ein Missbrauch ist untersagt!!!
 */1
function createGermanPersonalId($intLocation = null,
                                             $intNumber = null,
                                             $strNationality = 'D',
                                             $strBirthday = null, // z.B. 14.12.1981
                                             $strExpiration = null) // z.B. 14.12.2020
                                             // null = Zufällig
{
  $arrResult = array();
  // Prüfsumme ermitteln
  if (!function_exists('createChecksum')) {
    function createChecksum($intID) {
      $intMultiplier = 7;
      $intSum = 0;
      $intIDLength = strlen($intID);
      for ($a=0; $a<$intIDLength; $a++) {
        $intSign = (integer) substr($intID,$a,1);
        $intTmpSum = ($intSign*$intMultiplier);
        $intSum += $intTmpSum;
        if ($intMultiplier == 7) {
          $intMultiplier = 3;
        } elseif ($intMultiplier == 3) {
          $intMultiplier = 1;
        } else {
          $intMultiplier = 7;
        }
      }
      return substr($intSum,strlen($intSum)-1,1);
    }
  }

  // Parameter prüfen/ Vorbelegungen
  if (is_null($intLocation)) $intLocation = rand(1000,9999);
  if (!preg_match("|^[0-9]+$|",$intLocation) || ($intLocation<1000) || ($intLocation>9999)) {
    return false;
  }
  if (is_null($intNumber)) $intNumber = rand(11000,99999);
  if (!preg_match("|^[0-9]+$|",$intNumber) || ($intNumber<10000) || ($intNumber>99999)) {
    return false;
  }
  if (empty($strNationality)) $strNationality = chr(rand(65,95));
  if ((strlen($strNationality) != 1) || (ord($strNationality)<65) || (ord($strNationality)>95)) {
    return false;
  }
  if (is_null($strBirthday)) {
    $strBirthday = date("d.m.y", mktime(0,0,0,rand(1,12),rand(1,28), rand(date('Y',time())-60,date('Y',time())-16)));
  }
  if (!preg_match("/^([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})$/i",$strBirthday)) {
    return false;
  }
  if (is_null($strExpiration)) {
    $strExpiration = date("d.m.y",mktime(0,0,0,rand(1,12),rand(1,28),rand(date('Y',time())+1,date('Y',time())+5)));
  }
  if (!preg_match("/^([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})$/i",$strExpiration)) {
    return false;
  }
  // Informationen generieren
  $strBirthday = explode('.',$strBirthday);
  $strBirthday = $strBirthday[2].$strBirthday[1].$strBirthday[0];
  $strExpiration = explode('.',$strExpiration);
  $strExpiration = $strExpiration[2].$strExpiration[1].$strExpiration[0];
  $strTemp = $intLocation.$intNumber.createChecksum($intLocation.$intNumber);
  $arrResult[0] = $strTemp.$strNationality;
  $arrResult[1] = $strBirthday.createChecksum($strBirthday);
  $arrResult[2] = $strExpiration.createChecksum($strExpiration);
  $arrResult[3] = createChecksum($strTemp.$arrResult[1].$arrResult[2],true);
  return $arrResult;
}

// Aufruf:
$arrPersonalId = createGermanPersonalId();
echo $arrPersonalId[0].'< <'.$arrPersonalId[1].'<'.$arrPersonalId[2].'<<<<<<'.$arrPersonalId[3];

 

1 Star2 Stars3 Stars4 Stars5 Stars (Bewerte diesen Artikel als Erster!)

Ersten Kommentar schreiben

Antworten

Jeder freigeschaltete Kommentar erhält einen DoFollow-Link.
Wir schalten aber nur Kommentare frei, die auch wirklich welche sind und/oder den Artikel sinnvoll bereichern oder ergänzen. Also gebt euch ein wenig Mühe :)


*