Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Που να μπει ο έλεγχος του ΑΦΜ

Îåêßíçóå áðü ôï ìÝëïò agmarios. Τελευταία δημοσίευση από το μέλος Nassos.NET στις 29-08-2006, 14:43. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-07-2006, 14:03 15137

    Που να μπει ο έλεγχος του ΑΦΜ

    Σκέφτομαι να βάλω τον έλεγχο εγκυρότητας του ΑΦΜ στον sql server σαν check constraint.

    Απ την άλλη θα μπορούσα να το βάλω και στο businnes logic ή ακόμη και σαν Validator στην σελίδα εισαγωγής των στοιχείων (asp.net v2)

    Ποια είναι η γνώμη σας;
    Μάριος

     

  •  24-07-2006, 14:34 15140 σε απάντηση της 15137

    Απ: Που να μπει ο έλεγχος του ΑΦΜ

    Όταν λες τον έλεγχο εγκυρότητας, εννοείς απλάτον έλεγχο για ένα numeric 9 ψηφίων ή όλοκληρο τον αλγόριθμο; Γιατί στην δεύτερη περίπτωση θα πρέπει να το υλοποιήσεις σε TSQL με UDF και όσο να'ναι, δεν είναι το ίδιο εύκολο με το να το υλοποιήσεις σε VB.NET/C#. Από εκεί και πέρα, αν υπάρχει περίπτωση να γεμίζει η βάση με data με άλλον τρόπο, πέρα από την σελίδα εισαγωγής, τότε καλό είναι να βάλεις αυτό το check constraint στη βάση. Από την άλλη μεριά, και ιδιαίτερα μιας και μιλάμε για web forms, θα πρέπει να κάνεις ένα roundtrip για να ελέγξεις αν ο κωδικός είναι σωστός πράγμα που δεν θα συμβαίνει αν βάλεις τον έλεγχο με validator.


    Vir prudens non contra ventum mingit
  •  24-07-2006, 14:37 15141 σε απάντηση της 15137

    Απ: Που να μπει ο έλεγχος του ΑΦΜ

    Εγώ προτείνω και στα δύο. Στη βάση πρέπει να μπει οπωσδήποτε για να εξασφαλίσεις την εγκυρότητα των στοιχείων σου, και στην εφαρμογή για να γλυτώσεις το roundtrip.
    Χρήστος Γεωργακόπουλος
  •  24-07-2006, 15:23 15144 σε απάντηση της 15141

    Απ: Που να μπει ο έλεγχος του ΑΦΜ

    Χαίρομαι που έχουμε τους ίδιους ακριβώς προβληματισμούς. Πάντως μιλάμε για τον αλγόριθμό ελέγχου και όχι απλά το μέγεθος.

    Την TSQL δεν την φοβάμαι αν και πράγματι είναι αρκετά ποιο δύσχρηστη από τις .net Γλώσσες. Πάντως κάπου διάβασα ότι μπορείς να γράψεις και managed code στον sql server και έχει και αρκετά πλεονεκτήματα.

    Το roundtrip δεν το πολυσκέφτομαι γιατί αν μπουν 1000 εγγραφές σε αυτό τον πίνακα (καταστήματα σε online-marketplace) θα κάνω δώρο κρουαζιέρα σε όλα τα μέλη του dotnetzone.

    Περισσότερο το σκέφτομαι ως σχεδιαστική αρχή, σε ποιο επίπεδο σχεδίασης ανήκει.

    Ευχαριστώ για τις απαντήσεις

  •  24-07-2006, 18:34 15147 σε απάντηση της 15144

    Απ: Που να μπει ο έλεγχος του ΑΦΜ

    Χμμ ... βάλτο στο Business σου, και ο custom validator σου μπορεί να το χρησιμοποιεί απο 'κεί.
    Angel
    O:]
  •  24-07-2006, 20:12 15148 σε απάντηση της 15144

    Απ: Που να μπει ο έλεγχος του ΑΦΜ

     agmarios wrote:


    Περισσότερο το σκέφτομαι ως σχεδιαστική αρχή, σε ποιο επίπεδο σχεδίασης ανήκει.

    Οι σχεδιαστικές αρχές ικανοποιούν συνήθως συγκεκριμένες ανάγκες και μέσα στα πλαίσια που καθορίζουν αυτές οι ανάγκες, θα πρέπει να τις σκεφτόμαστε (τις αρχές). Μάλιαστα, όσες φορές θα δεις να ακολουθείται μια σχεδιαστική αρχή, άλλες τόσες θα δεις να καταστρατηγείται για τον άλφα ή βήτα λόγο που (ενδεχομένως δικαιολογημένα) επέλεξε ο σχεδιαστής του συστήματος. Γι αυτό, όπως έχω ξαναπεί, αυτό που οδηγεί τις αποφάσεις σου είναι οι ανάγκες σου και η ολοκληρωμένη γνώση που σου επιτρέπει να δεις τα υπέρ και τα κατά. Άλλωστε, αυτά ποτέ δεν είναι απόλυτα τεχνολογικά. Υπάρχει ο παράγοντας "χρήμα" και ο παράγοντας "χρόνος" που παίζουν σημαντικό ρόλο στις αποφάσεις...


    Vir prudens non contra ventum mingit
  •  24-07-2006, 21:02 15149 σε απάντηση της 15144

    Απ: Που να μπει ο έλεγχος του ΑΦΜ

     agmarios wrote:
    Το roundtrip δεν το πολυσκέφτομαι γιατί αν μπουν 1000 εγγραφές σε αυτό τον πίνακα (καταστήματα σε online-marketplace) θα κάνω δώρο κρουαζιέρα σε όλα τα μέλη του dotnetzone.

    Εγώ πάλι θα γράψω και την φίλη μου στο dotnetzone... ποτέ δεν ξέρεις!


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  24-07-2006, 21:07 15150 σε απάντηση της 15148

    Yes [Y] Απ: Που να μπει ο έλεγχος του ΑΦΜ

     KelMan wrote:

    ... Άλλωστε, αυτά ποτέ δεν είναι απόλυτα τεχνολογικά. Υπάρχει ο παράγοντας "χρήμα" και ο παράγοντας "χρόνος" που παίζουν σημαντικό ρόλο στις αποφάσεις...

    Όπως πάντοτε ακριβής

     


    Βαγγέλης Ξανθάκης
    Independent Consultant
    www.aylos.com
  •  25-07-2006, 10:41 15158 σε απάντηση της 15148

    Απ: Που να μπει ο έλεγχος του ΑΦΜ

    Φυσικά και συμφωνώ με αυτά που γράφεις, απλά για πρώτη φορά έχω σχεδόν "ειδανικές συνθήκες" οπότε μπορώ να σκεφτώ κάποια πράγματα παραπάνω και λίγο ποιο θεωρήτικά.

    Ας εξηγήσω λοιπόν λίγο το ειδανικές συνθήκες:

    1. Μίλησα εγώ με τους πελάτες και καθορίσαμε τις προδιαγραφές.
    2. Συντάχθηκε τεχνική προσφορά η οποία έγινε παράρτημα της σύμβασης, οπότε κάνω μόνο ότι συμφωνήσαμε.
    3. Το χρονοδιάγραμμα μου επιτρέπει να κάνω καλή δουλειά
    4. Το μέγεθος και η πολυπλοκότητα του έργου μου δίνουν την ευκαιρία να πάω μπροστά και εγώ ως προγραμματιστής αλλά και η μικρή εταιρία στην οποία εργάζομαι.
    5. Είμαστε 2 άτομα dedicated στο project και εγώ κάνω όλες τις σχεδιαστικές επιλογές.

    Βέβαια το να είσαι project manager, software analyst, developer κλπ κλπ δεν είναι ό,τι καλύτερο αλλά δεν μπορείς να τα έχεις όλα στη ζωή.

    Το ζήτημα λοιπόν που έγινε "φλέγον" έχει ως εξής:

    το project όπως ανέφερα και σε προηγούμενο topic είναι μια On-line marketplace. Στον πίνακα λοιπόν των καταστημάτων έχουμε ένα πεδίο για το ΑΦΜ. Για την ακρίβεια βρήσκεται σε έναν πίνακα με τα φορολογικά στοιχεία των καταστημάτων (1 to 1) με τον πίνακα των καταστημάτων.
    Ο πίνακας αυτός εκτιμώ ότι στην καλύτερη περίπτωση θα έχει κάποιες εκατοντάδες εγγραφές (το ειδανικό είναι να έχει 999 για να γλιτώσω και τα έξοδα) . Επίσης θα γίνονται ελάχιστα updates (μόνο αν πληκτρολογηθούν λάθος δεδομένα, ή γίνει πώληση της επιχείρισης ή κατι άλλο συνταρακτικό) και δεν θα γίνονται deletes (το id των καταστημάτων είναι FK σε πολλούς άλλους πίνακες οι οποίοι δεν θέλουμε να σβήνονται (πχ παραγγελίες, πληρωμές)). Τέλος θα γίνονται και λίγες αναγνώσεις αφού δεν μετέχει ενεργά στη λειτουργία της εφαρμογής.

    Σκεφτόμουν λοιπόν που να βάλω τον έλεγχο. Το πρώτο που σκέφτηκα ήταν να το βάλω στον SQL server. Αλλά η βάση θα δέχεται Data μόνο από την εφαρμογή μου οπότε αποκτώ μεγαλύτερη ευελιξία και μπορώ να το βάλω και αλλού. Σκέφτηκα το roundtrip και είπα να το βάλω σε validator αλλά θέλω έστω και για μια φορά στη ζωή μου να αφήσω το UI "καθαρό" για να μπορώ να το λέω στα εγγόνια μουSmile. Το business logic μου φαίνεται ωραίο μέρος αλλά ήθελα να δω και τις γνώμες άλλων.

    Όσο για τους παράγοντες χρόνο και χρήμα νομίζω ότι το ίδιο κοστίζει όπου και να μπει. Η συζήτηση  που κάνουμε κοστίζει αρκετά σε χρόνο και σε χρήμα αλλά εντάσεται στο 25% επιπλέον χρόνο που έχει αναφερθεί και σε τόσα άλλα topics.

    Τέλος δεν έχω καμία αντίρρηση να παραβώ τις αρχές αν υπάρχει λόγος. Εδώ όμως πια είναι η αρχή; και ποιος ο λόγος για να την παραβώ;

    Ευχαριστώ όλους για τις απαντήσεις τους και το χρόνο τους
    Μάριος

  •  29-08-2006, 14:43 16095 σε απάντηση της 15137

    Απ: Που να μπει ο έλεγχος του ΑΦΜ

    Ωραίο topic,

    Να πω και εγώ την Γνώμη μου, Εγώ θα το εβαζα, και το εχω βάλει, στο business logic, ετσι μπορω να το δουλεύω και από WinForm και WebForm. Παραθέτω και την μεθοδο που δημιούργισα:

    ///

    /// CheckAFM: Ελέγχει αν ένα ΑΦΜ είναι σωστό

    ///

    /// Το ΑΦΜ που θα ελέγξουμε

    /// true = ΑΦΜ σωστό, false = ΑΦΜ Λάθος

    public static bool CheckAFM(string cAfm)

    {

    int nExp = 1;

    // Ελεγχος αν περιλαμβάνει μόνο γράμματα

    try {long nAfm = Convert.ToInt64 (cAfm);}

    catch (Exception) {return false;}



    // Ελεγχος μήκους ΑΦΜ

    cAfm = cAfm.Trim ();

    int nL = cAfm.Length;

    if (nL != 9) return false;



    //Υπολογισμός αν το ΑΦΜ είναι σωστό

    int nSum = 0;

    int xDigit = 0;

    int nT = 0;

    for (int i = nL - 2; i >=0; i--)

    {

    xDigit = int.Parse (cAfm.Substring (i, 1));

    nT = xDigit * (int) (Math.Pow (2,nExp));

    nSum += nT;

    nExp++;

    }



    xDigit = int.Parse (cAfm.Substring (nL-1, 1));

    nT = nSum / 11;

    int k = nT * 11;

    k = nSum - k;



    if (k == 10) k = 0;

    if (xDigit != k) return false;

    return true;

    }

    Αυτά τα ολίγα!!

    Happy Coding!
    "Success is the ability to go from one failure to another with no loss of enthusiasm."
    Winston Churchill

    "Quality means doing it right when no one is looking."
    Henry Ford

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems