Location: PHPKode > scripts > checkidd > checkidd/iddcheck.php
<?php

 /*****************************************************\
 * Eine Klasse von Florian Rathe
 * Ist mein erster Versuch Objektorientiert zu coden
 * wenn Ihr Verbesserungsvorschläge habt schickt sie
 * bitte an hide@address.com
 *
 * Wie diese Klasse Funktioniert seht ihr am besten in
 * beispiel.php .... have fun ;)
 *
 * Kurzinfo:
 * Gebt der Methode 'checkidd' Eine ausweisnummer mit
 * allen '<'-Zeichen und sie gibt ein Array zurück.
 * 1=richtig 0=falsch
 * Array
 * (
 *   [0]=> 1 / 0 Syntax
 *   [1]=> 1 / 0 Chechsumme 1. Zahlenreihe
 *   [2]=> 1 / 0 Chechsumme 2. Zahlenreihe
 *   [3]=> 1 / 0 Chechsumme 3. Zahlenreihe
 *   [4]=> 1 / 0 Gesammtchechsumme
 *               (Die Zahl ganz am ende)
 *   [5]=> Ausweisnummer
 *   [6]=> Geburtsdatum (Format: dd.mm.yy)
 * )
 *
 * Ändert was ihr wollt aber lasst bitte diesen
 * Kommentar stehen.
 \*****************************************************/

   class iddcheck
   {

     function checkidd($string)
     {
       /*
        * Überprüfung ob die Ausweisnummer auch das richtige Format hat ...
        * Bsp.: 1234567890D<<1234567<1234567<<<<<<<1
        */
       if(preg_match("/^([0-9]{10})D<<([0-9]{7})<([0-9]{7})[<]{7}([0-9]{1})$/", $string, $regs))
       {
         $ergebnis[]=1;

       /*
        * Überprüfung der Checksumme der 1. Zahlenreihe ...
        * Bsp.:        1234567890D<<1234567<1234567<<<<<<<1
        *       die da-^^^^^^^^^
        */
         if($this->checksum($regs[1]))
          $ergebnis[]=1;
         else
          $ergebnis[]=0;

       /*
        * Überprüfung der Checksumme der 2. Zahlenreihe ...
        * Bsp.: 1234567890D<<1234567<1234567<<<<<<<1
        *             die da-^^^^^^
        */
         if($this->checksum($regs[2]))
          $ergebnis[]=1;
         else
          $ergebnis[]=0;

       /*
        * Überprüfung der Checksumme der 3. Zahlenreihe ...
        * Bsp.: 1234567890D<<1234567<1234567<<<<<<<1
        *                     die da-^^^^^^
        */
         if($this->checksum($regs[3]))
          $ergebnis[]=1;
         else
          $ergebnis[]=0;

         $numbers=$regs[1] . $regs[2] . $regs[3] . $regs[4];

       /*
        * Überprüfung der Gesammtchecksumme
        * Bsp.:        1234567890D<<1234567<1234567<<<<<<<1
        *       die da-^^^^^^^^^^   ^^^^^^^ ^^^^^^^
        */
         if($this->checksum($numbers))
          $ergebnis[]=1;
         else
          $ergebnis[]=0;

       /*
        * Rückgabe der Ausweisnummer und des Geburtsdatum
        */
         $ergebnis[]=$regs[1];
         $ergebnis[]=(substr($regs[2],4,2) . "." . substr($regs[2],2,2) . "." . substr($regs[2],0,2));
       }
       else
       {
        for($i=1; $i<=7; $i++)
        {
          $ergebnis[]=0;
        }
       }
       return $ergebnis;
     }

    /*
     * Diese Methode überprüft die Checksumme einer Zahlenreihe
     * Antwortet mit true oder false
     */
     function checksum($zahlenreihe)
     {
       $multi=7;
       for($i=1; $i<strlen($zahlenreihe); $i++)
       {
        $geaendert=0;
        $zeichen=substr($zahlenreihe,$i-1,1);
        $ergebnis=$ergebnis+($zeichen*$multi);
        $test=$zeichen*$multi;
        if($multi==7)
        {
         $multi=3;
         $geaendert=1;
        }
        if($multi==3 && $geaendert!=1)
        {
         $multi=1;
         $geaendert=1;
        }
        if($multi==1 && $geaendert!=1)
        {
         $multi=7;
         $geaendert=1;
        }
       }
       $erg_check=substr($ergebnis,strlen($ergebnis)-1,1);
       $org_check=substr($zahlenreihe,strlen($zahlenreihe)-1,1);
       if($erg_check==$org_check)
        return true;
       else
        return false;
     }

   }

?>
Return current item: checkidd