Μετάβαση στο περιεχόμενο

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

19/03/2008

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

Σε αυτά τα δεδομένα υπήρχε και το ΑΦΜ, και μιας και πολλές φορές γινόταν λανθασμένη καταχώρηση, ήταν ευκαιρία να γίνει ένα ξακαθάρισμα. Ψάχνοντας στο 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;
}

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

No comments yet

Υποβολή σχολίου

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Αλλαγή )

Twitter picture

You are commenting using your Twitter account. Log Out / Αλλαγή )

Facebook photo

You are commenting using your Facebook account. Log Out / Αλλαγή )

Connecting to %s

Follow

Get every new post delivered to your Inbox.