Ελεγχος Εγκυρότητας Α.Φ.Μ. (PHP Version)

Απλώς για να υπάρχει διαθέσιμο σε όποιον το χρειαστεί, η php version του κώδικα που υπάρχει στο άρθρο Ελεγχος Εγκυρότητας Α.Φ.Μ.

<?php
    function CheckAFM($afm)
    {
        if (!preg_match('/^(EL){0,1}[0-9]{9}$/i', $afm))
            return false;
        if (strlen($afm) > 9)
            $afm = substr($afm, 2);

        $remainder = 0;
        $sum = 0;

        for ($nn = 2, $k = 7, $sum = 0; $k >= 0; $k--, $nn += $nn)
            $sum += $nn * ($afm[$k]);
        $remainder = $sum % 11;

        return ($remainder == 10) ? $afm[8] == '0'
                                  : $afm[8] == $remainder;
    }
?>

Εχει μερικές μικροδιαφορές από τις C, C# Versions, αλλά ήταν απαραίτητο αφού προοριζόταν για χρήση σε ιστοσελίδα…

2 Comments

  1. Επίσης Θα μπορούσε να χρησιμοποιηθεί κάποιο από τα web services για να ελεγχθεί αν το ΑΦΜ ανήκει σε κάποιο νομικό (ή και φυσκό) πρόσωπο.
    Για παράδειγμα (στα ελληνικά ΑΦΜ)

    function checkVAT($vatNo)
    {
        $client = new SoapClient(
            "http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"
        );
        $result = $client->checkVat(array('countryCode'=>'EL','vatNumber'=>$vatNo));
        return $result->valid;
    }
    
    • Καλησπέρα φίλε μου,

      Μπορείς να βάλεις τον έλεγχο μέσα σε try catch, για να μην πέφτει το σύστημα σε περίπτωση σφάλματος:

      $client = new SoapClient(“http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl”);
      try{
      $params = array(‘countryCode’ => ‘EL’, ‘vatNumber’ => $vatNo);
      $r = $client->checkVat($params);
      } catch(SoapFault $e) {
      echo $e->faultstring;
      exit;
      }