Αυτόν τον αλγόριθμο παλαιότερα χρειάστηκα δύο χρόνια για να τον αποκωδικοποιήσω και ενώ πανηγύριζα για το κατόρθωμά μου, μετά από περίπου 3 χρόνια το υπουργείο οικονομικών αποφάσισε να δώσει η ίδια τον αλγόριθμο στην δημοσιότητα!!

Εν πάσει περιπτώσει ο αλγόριθμος είναι ο εξής:

Από τον 9ψήφιο αριθμό που θέλουμε να ελέγξουμε, απομονώνουμε το τελευταίο ψηφίο. Αυτό είναι το ψηφίο ελέγχου που θα πρέπει να συμπίπτει με τον μονοψήφιο αριθμό που θα βρούμε παρακάτω.

Παίρνουμε τώρα ένα – ένα τα υπόλοιπα ψηφία του αριθμού, ξεκινώντας από το δεξιότερο, πολλαπλασιάζοντας το με μια δύναμη του 2, όση είναι και η θέση του ψηφίου σε αυτόν τον αριθμό. Δηλαδή για το πρώτο δεξιά με 21, το δεύτερο με 22, το τρίτο δεξιά 23 κοκ. Τα μερικά αυτά γινόμενα τα προσθέτουμε και έχουμε το άθροισμά τους. Αυτού του αθροίσματος παίρνουμε το υπόλοιπο της διαίρεσης με το 11 και αυτού του υπολοίπου το υπόλοιπο με το 10. Ο τελικός αυτός αριθμός πρέπει να είναι ίσος  με το ψηφίο του ΑΦΜ που απομονώσαμε.

Παράδειγμα για το ΑΦΜ 011111111 (είναι το ευκολότερο σε πράξεις). Απομονώνουμε το τελευταίο ψηφίο ( το 1 δηλαδή), για τον υπόλοιπο αριθμό 01111111 εφαρμόζουμε τα παραπάνω που είπαμε και έχουμε

1*21+1*22+1*23+1*24+1*25+1*26+1*27+0*28

=2+4+8+16+32+64+128+0=254

Το υπόλοιπο αυτού του αριθμού με το 11 είναι 1 και αυτού το υπόλοιπο με το 10 είναι πάλι 1

Το ΑΦΜ λοιπόν είναι σωστό γιατί το τελευταίο ψηφίο που απομονώσαμε είναι ίσο με το παραπάνω υπόλοιπο

Θα δώσω και ένα κώδικα σε VB για τον παραπάνω αλγόριθμο

Function CheckAFM(VatNo As String) As Boolean
Dim RetVal, TotalVal, i, IsNumber, NumToStr

RetVal = False
If Len(VatNo) = 9 And Val(VatNo) <> 0 Then
NumToStr = LTrim(Str(Val(VatNo)))
IsNumber = (String(9 – Len(NumToStr), “0”) + NumToStr = VatNo)

If IsNumber Then
TotalVal = 0
For i = 8 To 1 Step -1
TotalVal = TotalVal + Val(Mid(VatNo, i, 1)) * 2 ^ (9 – i)
Next
RetVal = (((TotalVal Mod 11) Mod 10) = Val(Right(VatNo, 1)))
End If
End If
CheckAFM = RetVal
End Function

Σημειώνω ότι αυτός ο αλγόριθμος τσεκάρει αν ένα 9ψήφιο νούμερο μπορεί να είναι ΑΦΜ και όχι την ύπαρξή του ή όχι. Είναι έλεγχος ορθότητας και όχι έλεγχος υπαρκτότητας.Αν έχει δοθεί σε κάποιο φυσικό πρόσωπο ή εταιρία και είναι σε χρήση, μόνο η Εφορία το γνωρίζει και δεν βρίσκεται μέσω αλγορίθμου αυτό.