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

2008 Μαρτίου 19

Πρόσφατα χρειάστηκε να μεταφέρω δεδομένα από μια βάση δεδομένων σε μια άλλη. Φυσικά όπως θα γνωρίζουν οι περισσότεροι αυτές οι διαδικασίες ποτέ δεν είναι τόσο απλές όσο ακούγονται, ειδικά όταν πρέπει να πέσει μαγείρεμα στα δεδομένα (βλ. διαφορετικοί πίνακες, διαφορετικοί τύποι πεδίων, διαφορετικές τιμές).

Σε αυτά τα δεδομένα υπήρχε και το ΑΦΜ, και μιας και πολλές φορές γινόταν λανθασμένη καταχώρηση, ήταν ευκαιρία να γίνει ένα ξακαθάρισμα. Ψάχνοντας στο Internet για αλγόριθμους ελέγχου του ΑΦΜ βρήκα κάποιες λύσεις σε διάφορες γλώσσες, οπότε έπιασα μια που βρήκα στο digitalnews.gr (σε C# για να μην κάνω και πολλές αλλαγές – έτσι νόμιζα τουλάχιστον) και (αντ)έγραψα την δικιά μου C# function και, ιδού το αποτέλεσμα:

bool CheckAFM(string afm)
{
    long remainder, sum;
    int nn, k;    

    if (afm.Length != 9)
        return false;
    for (nn = 2, k = 7, sum = 0; k >= 0; k--, nn += nn)
        sum += nn * (afm[k] - '0');
    remainder = sum % 11;    

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

Νομίζω πως είναι ότι πιο κοντινό στην αντίστοιχη C/C++ υλοποίηση:

bool CheckAFM(const char* afm)
{
    long remainder, sum;
    int nn, k;     

    if (strlen(afm) != 9)
        return false;
    for (nn = 2, k = 7, sum = 0; k >= 0; k--, nn += nn)
        sum += nn * (afm[k] - '0');
    remainder = sum % 11;    

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

Κατεβάστε τον κώδικα…

Χωρίς σχόλια ακόμα

Υποβολή απάντησης

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS