
Όπως θα γνωρίζετε, ο Αριθμός Φορολογικού Μητρώου (Α.Φ.Μ.) στην Ελλάδα, δίδεται έπειτα από κάποιους υπολογισμούς. Υπάρχει δηλαδή ένας αλγόριθμους που περιγράφει τη λογική συνέπεια των αριθμών. Είναι λοιπόν πολλές φορές χρήσιμο προγραμματιστικά να ελέγχουμε την εγκυρότητα ενός Α.Φ.Μ. που θα πληκτρολογήσει ο χρήστης, για να τον γλιτώσουμε από πιθανά «τρεχάματα» (όλοι θα έχετε ζήσει τις ελληνικές δημόσιες υπηρεσίες) από λάθος εισαγωγή Α.Φ.Μ. Αυτό που θα κάνουμε λοιπόν εδώ είναι να δούμε βήμα-προς-βήμα τον τρόπο ελέγχου της εγκυρότητας ενός Α.Φ.Μ. που θα μας πληκτρολογήσει ο χρήστης, σε γλώσσα C# και χρησιμοποιώντας το Visual Studio 2005. Ο αλγόριθμος είναι αυτός που έχει σημασία και όχι τόσο η γλώσσα υλοποίησης, οπότε αν καταλάβετε τον κώδικα μπορείτε πολύ εύκολα και απλά να κάνετε τον δικό σας έλεγχο εγκυρότητας σε όποια γλώσσα θέλετε.
Ο τρόπος υπολογισμού είναι ο εξής:
Έστω ότι έχουμε το Α.Φ.Μ. 045678990.
Αντιστρέφουμε τον αριθμό και πολλαπλασιάζουμε ένα ένα τα ψηφία του, αθροίζοντας τα αποτελέσματα, σύμφωνα με το παρακάτω σκίτσο:

Αν το άθροισμα και το αποτέλεσμα είναι ο ίδιος αριθμός τότε το Α.Φ.Μ. μας είναι έγκυρο, σε αντίθετη περίπτωση (δηλαδή το αποτέλεσμα είναι διαφορετικός από το άθροισμα είτε ακέραιος είτε δεκαδικός), το Α.Φ.Μ. που δόθηκε δεν είναι έγκυρο.
Ας δούμε πως μπορούμε υλοποιήσουμε προγραμματιστικά τον παραπάνω αλγόριθμο.
Δημιουργούμε ένα νέο αρχείο σε C#. Δημιουργούμε ένα textbox και ένα button, έστω τα textΒox1 και button1. Πηγαίνουμε στις παραμέτρους του textbox1 (επιλέγοντάς το και πατώντας F4) και δίνουμε MaxLength το 9 (τον αριθμό των ψηφίων του Α.Φ.Μ.).
Στη συνέχεια κάνουμε διπλό κλικ στο κουμπί button1. Στην οθόνη του κώδικα που εμφανίζεται ανεβαίνουμε στο πάνω μέρος της και προσθέτουμε κάτω από τα υπόλοιπα using το
Δημιουργούμε μία μέθοδο με τον παρακάτω κώδικα, η οποία θα ελέγχει το αν αυτό που πληκτρολόγησε ο χρήστης είναι αριθμοί ή γράμματα.
Αφού τελειώσουμε με την προετοιμασία πάμε στο «ζουμί». Προσθέτουμε μέσα το button1_Click τον παρακάτω κώδικα:
Παρατηρήσεις:
Μπορείτε να κατεβάσετε τον παραπάνω οδηγό σε video. Μπορείτε να το βρείτε στην κατηγορία Downloads και στην υποκατηγορία Video Tutorials, ή μπορείτε να ακολουθήσετε το παρακάτω link:
http://www.digitalnews.gr/modules/PDdownloads/visit.php?cid=4&lid=12
RSS για τα σχόλια αυτού του άρθρου | TrackBack URL
6-05-2009 | 6:59 pm
Έχεις κάνει λάθος στον τύπο.
Η πράξη είναι το υπόλοιπο της διαίρεσης με το 11 πρέπει να ισόυτε με το τελευταίο ψηφίο του Α.Φ.Μ.
π.χ. (0*0 + 9*2 + 9*4 + 8*8 + 7*16 + 6*32 + 5*64 + 4*128 + 0*256) mod 11 = (0 + 18 + 36 + 64 + 112 + 192 + 320 + 512) mod 11 = 1254 mod 11 = 0
Άρα το τελευταίο ψηφίο του Α.Φ.Μ. πρέπει να είναι 0. Αν διαιρέσεις εναν αριθμό με το 11 και τον πολλαπλασιάσεις με το 11 θα είναι πάντα σωστο όποιο Α.Φ.Μ. και να δώσεις.
26-06-2009 | 9:50 am
Σωστός ο Δημήτρης
20-07-2009 | 4:19 pm
ΜΠΟΡΕΙΤΕ ΣΑΣ ΠΑΡΑΚΑΛΩ ΝΑ ΜΟΥ ΠΕΙΤΕ ΠΟΙΑ ΓΡΑΜΜΗ ΤΟΥ ΚΩΔΙΚΑ ΑΛΛΑΖΕΙ?
29-07-2009 | 4:40 pm
Ειναι σωστό μόνο για τις περιπτώσεις που το τελευταίο digit του ΑΦΜ είναι 0.
Διαφορετικά το υπόλοιπο της διαίρεσης πρέπει να είναι ίσο με το τελευταίο digit του AFM.
Αν διαιρέσουμε ένα αριθμό με 11 και τον πολλαπλασιάσουμε με 11 δεν είναι πάντα το ίδιο.
ΠΧ 1255 /11 = 114.09090909
114.09090909 * 11 = 1254.99999999
11-12-2009 | 2:08 pm
Αντικατέστησε τα
double check;
check = sum / 11;
check = check * 11;
if (sum == check)
με
int checkDigit = int.Parse(afm[8].ToString());
if (sum % 11 % 10 == checkDigit);