Jump to content

αλγοριθμος που τσεκαρεi το ΑΦΜ


Recommended Posts

Guest Επισκέπτης-nikos-

hello

Θα ήθενα ανα ρωτησώ που μπορώ να διαβασως για τον τροπο με τον οποίο τσεκάρε το ΑΦΜ. Υπάρχει καποιο website για τετοια θέματα και ποιο ειναι το link. Σκεφτομαι να αρχίσω να προγραμματίζω εφαρμογές σχετικα με λογιστικά.

Thank you

Link to comment
Share on other sites

Guest Guest
ΑΝΕΤΡΕΞΕ ΣΤΟ WWW.E-TAXIS.GR KAI SE WWW.BARDAS.GR

ΣΥΓΓΝΩΜΗ ΓΙΑ ΤΟ VARDAS .GR ΕΙΝΑΙ ΚΑΠΟΙΟ ΠΡΟΓΡΑΜΜΑ ΕΝΟΣ ΛΟΓΙΣΤΗ ΙΩΑΝΝΗ ΒΑΡΔΑ.

Link to comment
Share on other sites

Visual Basic, Visual Basic For Applications

Δημιουργήστε ένα νέο Module και αντιγράψτε τον παρακάτω κώδικα:

Public Function CheckAFM(sAFM As String) As Boolean

' Validate an AFM number

' Pre: sAFM = string containing the AFM

' Post: True if sAFM is a valid AFM, False otherwise

' NOTE: This algorithm does NOT check if the AFM actually exists, only if it is a valid number!

' Usage Example: a=CheckAFM("012345678")->a=False

' Yiannis Papadopoulos <www.yiapap.com> 2004

Dim iSum As Integer

Dim btRem As Byte

Dim i As Byte

If sAFM = "" Or Len(sAFM) <> 9 Then

CheckAFM = False

Exit Function

End If

iSum = 0

CheckAFM = False

For i = 1 To Len(sAFM) - 1

If Asc(mID(sAFM, i, 1)) < 48 Or Asc(mID(sAFM, i, 1)) > 57 Then

CheckAFM = False

Exit Function

End If

iSum = iSum + Val(mID(sAFM, i, 1)) * (2 ^ (Len(sAFM) - i))

Next i

If iSum = 0 Then

CheckAFM = False

Else

btRem = iSum Mod 11

If Val(Right(sAFM, 1)) = btRem Or (btRem = 10 And Val(Right(sAFM, 1)) = 0) Then CheckAFM = True

End If

End Function

--------------------------------------------------------------------------------

ASP Script (VBScript)

Αντιγράψτε τον παρακάτω κώδικα σε οποιοδήποτε σημείο της ASP σελίδας σας (συνίσταται η κορυφή)

<%Function CheckAFM(sAFM)

' Validate an AFM number

' Pre: sAFM = string containing the AFM

' Post: True if sAFM is a valid AFM, False otherwise

' NOTE: This algorithm does NOT check if the AFM actually exists, only if it is a valid number!

' Usage Example: a=CheckAFM("012345678")->a=False

' Yiannis Papadopoulos <yiapap> 2004

Dim iSum

Dim btRem

Dim i

on error resume next

If sAFM = "" Then

CheckAFM = False

Exit Function

End If

iSum = 0

CheckAFM = False

For i = 1 To Len(sAFM) - 1

If Asc(mID(sAFM, i, 1)) < 48 Or Asc(mID(sAFM, i, 1)) > 57 Then

CheckAFM = False

Exit Function

End If

iSum = iSum + mid(sAFM, i, 1) * (2 ^ (Len(sAFM) - i))

Next

if iSum=0 then

Exit Function

else

btRem = iSum Mod 11

If int(Right(sAFM, 1)) = btRem Or (btRem = 10 And int(Right(sAFM, 1)) = 0) Then

CheckAFM = True

else

CheckAFM=False

end if

end if

End Function%>

Link to comment
Share on other sites

Guest KAIRATOS=KNOSSOS
Καί σε excel

ΓΕΙΑ ΣΟΥ GUS ΑΘΑΝΑΤΕ. ΕΒΓΑΛΕΣ ΚΑΙ ΑΥΤΟ ΣΕ ΕΞΕΛ; ΕΙΣΑΙ ΚΑΙ Ο ΠΡΩΤΟΣ. ΣΥΓΝΩΜΗ. ΜΕΤΑ ΤΟΝ ΚΑΡΠΟΔΙΝΗ. ΝΑΧΟΜΕ ΚΑΙ ΤΟ ΝΟΥ ΜΑΣ. ΜΗΝ ΦΑΜΕ ΚΑΙ ΚΑΜΙΑ ΚΑΛΠΑΖΙΑ. ΕΝΤΑΞΥ ΚΑΡΠΟΔΙΝΗ; ΕΣΥ ΕΙΣΑΙ Ο ΠΡΩΤΟΣ. ΜΗΝ ΤΣΑΤΙΣΤΗΣ GUS ΓΙΑ ΤΑ ΠΡΩΤΙΑ.

Link to comment
Share on other sites

Συνάδελφοι,

Ίσως ο επισκέπτης μας θέλει να μάθει πως δημιουργήθηκε ο αλγόριθμος με απλές

πράξεις,για να δημιουργήσει και αυτός κάποιο πρόγραμμα.

Αν είναι έτσι τότε:

Ο Αλγόριθμος του ΑΦΜ δημιουργείται από τις παρακάτω πράξεις:

ΕΣΤΩ Α.Φ.Μ: 122635660

ΤΟΤΕ: 1 2 2 6 3 5 6 6 0

Χ Χ Χ Χ Χ Χ Χ Χ

256 128 64 32 16 8 4 2

= = = = = = = =

256 + 256 + 128 + 192 + 48 + 40 + 24 + 12 = 956

956:11= 86,90

ΕΡΜΗΝΕΙΑ:

1.Στον ΑΦΜ απομονώνουμε το τελευταίο ψηφίο του

2.Αρχίζοντες κατόπιν από το πρότελευταίο ψηφίο,πολλαπλασιάζουμε όλα τα άλλα,

πάντοτε με τους αριθμούς 2,4,8,16,32,64,128,& 256.

3.Αθροίζουμε κατόπιν τα σύνολα που προκύπτουν από τους πολλαπλασιασμούς.

4.Το υπόλοιπο που προκύπτει το διαιρούμε με το 11.

5.Το δεκαδικό μέρος που προκύπτει από την διαίρεση πρέπει να είναι το ίδιο με το

τελευταίο ψηφίο του Α.Φ.Μ.

Ελπίζω να σε βοήθησα,εκτός και αν δεν κατάλαβα και 'γω καλά την ερώτηση,οπότε

να θεωρήσετε άκυρη την απάντησή μου.

Link to comment
Share on other sites

Guest Guest
Visual Basic, Visual Basic For Applications

Δημιουργήστε ένα νέο Module και αντιγράψτε τον παρακάτω κώδικα:

ΠΟΥ ΤΟ ΒΡΙΣΚΕΙΣ ???

ΣΤΟ EXCELL ΠΟΥ ΕΨΑΞΑ ΔΕΝ ΒΡΗΚΑ ΚΑΤΙ .....

ΜΠΟΡΕΙ ΚΑΠΟΙΟΣ ΣΑΣ ΠΑΡΑΚΑΛΩ ΝΑ ΜΕ ΒΟΗΘΗΣΕΙ ΛΙΓΟ ????

ΜΗΝ ΤΑ ΘΕΛΟΥΜΕ ΚΑΙ ΟΛΑ ΕΤΟΙΜΑ ΠΡΕΠΕΙ ΝΑ ΔΟΚΙΜΑΖΟΥΜΕ ΚΙΟΛΑΣ.

GUS ΣΕ ΕΥΧΑΡΙΣΤΩ ΓΙΑ ΟΛΟ ΤΟΝ ΚΩΔΙΚΑ ΠΟΥ ΕΓΡΑΨΕΣ.

ΜΕ ΕΒΑΛΕΣ ΣΤΑ ΑΙΜΑΤΑ ΚΑΙ ΘΕΛΩ ΝΑ ΔΟΚΙΜΑΣΩ ΑΛΛΑ ΕΙΜΑΙ ΛΙΓΟ ΑΡΧΑΡΙΟΣ ΚΑΙ ΙΣΩΣ ΒΛΑΚΑΣ !!!

Link to comment
Share on other sites

Προς Gus:

Τρομερά καλογραμμένη συνάρτηση .

Δεν νομίζω να μπορεί να γραφεί , έστω και με ένα χαρακτήρα λιγότερο.

ΜΠΡΑΒΟ

Προς Fafoutis:

To υπόλοιπο της διαίρεσης 86,90 πρέπει να στρογγυλοποιηθεί σε 86.

Μπορείς να το κάνεις με τη συνάρτηση που χρησιμοποιεί ο DimitrisK την Rounddown και την οποία ομολογώ ότι δεν γνώριζα γι' αυτό και τον ευχαριστώ .

Προς DimitrisK :

Σωστά κάνει τον έλεγχο , εκτός της περίπτωσης που το αποτέλεσμα της διαίρεσης είναι 10 και το τελευταίο νούμερο του ΑΦΜ είναι 0 .

Σ’ αυτή την περίπτωση θα σου δίνει αποτέλεσμα -10 και έτσι όποιο αριθμό και να γράψεις στο τελευταίο νούμερο του ΑΦΜ δεν θα έχεις αποτέλεσμα 0 . (Δηλαδή σωστός ΑΦΜ).

Και για να κάνεις ένα παράδειγμα χρησιμοποίησε τον ΑΦΜ που δίνει ο Fafoutis.

Προς τον επισκέπτη μας:

Εργαλεία

Μακροεντολή

Επεξεργασία visual Basic.

Link to comment
Share on other sites

Guest Guest
Προς Gus:

Τρομερά καλογραμμένη συνάρτηση .

Δεν νομίζω να μπορεί να γραφεί , έστω και με ένα χαρακτήρα λιγότερο.

ΜΠΡΑΒΟ

...................................................

Προς τον επισκέπτη μας:

Εργαλεία

Μακροεντολή

Επεξεργασία visual Basic.

Μήπως θα σας ηταν εύκολο να μου περιγράψεται βήμα βήμα την όλη διαδικασία δλδ πως να κάνω αυτά που λέει παραπάνω ο gus ???

Θα σας ήμουν υπόχρεη.

ευχαριστώ

Link to comment
Share on other sites

Guest Guest
Visual Basic, Visual Basic For Applications

Δημιουργήστε ένα νέο Module και αντιγράψτε τον παρακάτω κώδικα:

................................................................................

...............

κ. gus μήπως θα σας ηταν εύκολο να μου περιγράψεται βήμα βήμα την όλη διαδικασία δλδ πως να κάνω αυτά που λέτε παραπάνω ???

Θα σας ήμουν υπόχρεη (συγχωρίσται το θράσος μου).

ευχαριστώ

Link to comment
Share on other sites

Οπως καταλαβένεται το να περιγράψουμε σε ένα μήνυμα την διαδικασία δημιουργίας προγράμματος σε VB είναι αρκετά δύσκολο.

Ο παραπάνω κώδικας για να εισαχθεί σε πρόγραμμα VB ή σε excel προυποθέτει απλές γνώσεις προγραμματισμού οι οποίες δεν μπορούν να ανπτυχθούν εδώ

Για όσους δεν γνωρίζουν visual basic μπορούν να χρησιμοποιήσουν το αρχείο του excel.

Link to comment
Share on other sites

Guest yiapap
5.Το δεκαδικό μέρος που προκύπτει από την διαίρεση πρέπει να είναι το ίδιο με το

  τελευταίο ψηφίο του Α.Φ.Μ.

Εκτός κι αν το μέρος (modulus) είναι 10 οπότε το τελευταίο ψηφίο του ΑΦΜ πρέπει να είναι 0

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

Link to comment
Share on other sites

Guest Guest
Σωστά κάνει τον έλεγχο , εκτός της περίπτωσης που το αποτέλεσμα της διαίρεσης είναι 10 και το τελευταίο νούμερο του ΑΦΜ είναι 0 .

Σ’ αυτή την περίπτωση θα σου δίνει αποτέλεσμα -10 και έτσι όποιο αριθμό και να γράψεις στο τελευταίο νούμερο του ΑΦΜ δεν θα έχεις αποτέλεσμα 0 . (Δηλαδή σωστός ΑΦΜ).

Και για να κάνεις ένα παράδειγμα χρησιμοποίησε τον ΑΦΜ που δίνει ο Fafoutis.

To modulus δεν είναι ποτέ αρνητικό. Το modulus = 10 λαμβάνεται υπόψη εδώ:

Or (btRem = 10 And int(Right(sAFM, 1)) = 0)

(συγγνώμη για το 2ο & τελευταίο) Post :rolleyes:

Link to comment
Share on other sites

To modulus δεν είναι ποτέ αρνητικό. Το modulus = 10 λαμβάνεται υπόψη εδώ:

Or (btRem = 10 And int(Right(sAFM, 1)) = 0)

(συγγνώμη για το 2ο & τελευταίο) Post :rolleyes:

Μάλλον διάβασες την απάντησή μου βιαστικά

Link to comment
Share on other sites

Guest yiapap
Μάλλον διάβασες την απάντησή μου βιαστικά

Μάλλον έχεις δίκιο, συγγνώμη.

Ένα τελευταίο σχόλιο προς τον Gus (PM μόνο σε εγγεγραμμένους, οπότε...): Καλό θα ήταν να είχες προσθέσει κι ένα link προς την ιστοσελίδα από την οποία παραθέτεις τον κώδικα στην οποία εκτός του κώδικα υπάρχει και φόρμα επαλήθευσης ΑΦΜ σε περίπτωση που κάποιος θέλει να επιβεβαιώσει τον κώδικα.

Link to comment
Share on other sites

O παρακάτω κώδικας είναι αυτός που είχα φτιάξει πρίν χρόνια για το αρχείο checkΑΦΜ το οποίο συμπεριλαμβανόταν στις Λογιστικές Εφαρμογές.

Είναι σε VB6

Για την λειτουργία του πρέπει να δημιουργηθούν

Δύο buttons , Ενα label, και ένα textfield

(Command1,Command2,Text1,Label1)

---Αρχή κώδικα

Dim pinakas(9) As Integer

Dim pinakas2(9) As Integer

Dim meriko As Integer

--------------------------------------------

Private Sub Command1_Click()

On Error Resume Next

Dim t As Integer

Dim number1 As String

Dim digits As String

Dim atrisma As Integer

Dim pinakaitem As Integer

number1 = Text1.Text

For t = 1 To 9

digits = Mid(number1, t, 1)

pinakas(t) = digits

Next t

pol = 256

For t = 1 To 9

pinakas2(t) = pinakas(t) * pol

pol = pol / 2

Next t

For t = 1 To 8

pinakaitem = pinakas2(t)

atrisma = atrisma + pinakaitem

Next t

meriko = atrisma Mod 11

'Label1.Caption = " " & meriko & " " & atrisma

If meriko = 10 Then

check1

Else

check2

End If

End Sub

-------------------------------------------------------

Sub check1()

If pinakas(9) = 0 Then

Label1.ForeColor = 3:

Label1.Caption = "ΤΟ ΑΦΜ ΕΙΝΑΙ ΕΓKΥΡΟ"

Else

Label1.ForeColor = 4:

Label1.Caption = "ΤΟ ΑΦΜ ΔΕΝ ΕΙΝΑΙ ΕΓKΥΡΟ"

End If

End Sub

-----------------------------------------------------------

Sub check2()

If meriko = pinakas(9) Then

Label1.ForeColor = 3:

Label1.Caption = "ΤΟ ΑΦΜ ΕΙΝΑΙ ΕΓKΥΡΟ"

Else

Label1.ForeColor = 4:

Label1.Caption = "ΤΟ ΑΦΜ ΔΕΝ ΕΙΝΑΙ ΕΓKΥΡΟ"

End If

End Sub

----------------------------------------------------------

Private Sub Command2_Click()

Unload checkafm

End Sub

---------------------------------------------------------

Private Sub Text1_GotFocus()

Text1.Text = ""

Label1.Caption = ""

End Sub

----------------------------------------------------------

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii > Asc("9") Then 'Or KeyAscii < Asc("**") Then

MsgBox "ΕΙΣΑΓΕΤΕ ΜΟΝΟ ΑΡΙΘΜΗΤΙΚΟΥΣ ΧΑΡΑΚΤΗΡΕΣ": Text1.Refresh: Text1.Text = ""

End If

End Sub

-----------------------------------------------------------

Sub ERRORSUB()

MsgBox "ΔΕΝ ΕΙΣΗΧΘΕΙ ΑΦΜ"

End Sub

Link to comment
Share on other sites

Guest Guest
κ. gus μήπως θα σας ηταν εύκολο να μου περιγράψεται βήμα βήμα την όλη διαδικασία δλδ πως να κάνω αυτά που λέτε παραπάνω ???

Θα σας ήμουν υπόχρεη (συγχωρίσται το θράσος μου).

ευχαριστώ

ΜΗΠΩΣ Ο κ. yiapap ΣΑΝ ΔΗΜΙΟΥΡΓΟΣ ΘΑ ΜΠΟΡΟΥΣΕ ΝΑ ΒΟΗΘΗΣΕΙ ΑΝΑΦΕΡΟΝΤΑΣ ΤΑ ΒΑΣΙΚΑ ???

ΑΝ ΟΧΙ ΕΔΩ ΤΟΤΕ ΣΤΗΝ ΣΕΛΙΔΑ ΤΟΥ ???

Η ΓΝΩΣΗ (ΘΑ ΠΡΕΠΕΙ ???) ΝΑ ΜΕΤΑΔΙΔΕΤΑΙ ΑΓΑΠΗΤΟΙ ΣΥΝΑΔΕΛΦΟΙ.

ΕΥΧΑΡΙΣΤΩ ΓΙΑ ΤΟΝ ΧΡΟΝΟ ΣΑΣ & ΕΠΙΣΗΣ ΕΥΧΑΡΙΣΤΩ ΤΟΝ κ. GUS ΓΙΑ ΤΟ ΒΗΜΑ.

:D

Link to comment
Share on other sites

  • 2 weeks later...
ΓΕΙΑ  ΣΟΥ  GUS  ΑΘΑΝΑΤΕ.  ΕΒΓΑΛΕΣ ΚΑΙ ΑΥΤΟ ΣΕ ΕΞΕΛ;  ΕΙΣΑΙ ΚΑΙ Ο ΠΡΩΤΟΣ.  ΣΥΓΝΩΜΗ.  ΜΕΤΑ ΤΟΝ ΚΑΡΠΟΔΙΝΗ.  ΝΑΧΟΜΕ ΚΑΙ ΤΟ ΝΟΥ ΜΑΣ. ΜΗΝ ΦΑΜΕ ΚΑΙ ΚΑΜΙΑ ΚΑΛΠΑΖΙΑ.  ΕΝΤΑΞΥ ΚΑΡΠΟΔΙΝΗ; ΕΣΥ ΕΙΣΑΙ Ο ΠΡΩΤΟΣ. ΜΗΝ ΤΣΑΤΙΣΤΗΣ GUS ΓΙΑ ΤΑ ΠΡΩΤΙΑ.

Αντώνη καλημέρα !!! Δεν νομίζω πως είμαι πρώτος άλλωστε δεν αρκεί μόνο να είσαι πρώτος αλλά να είσαι και αποτελεσματικός και σε αυτό ο κώστας έχει ξεφύγει μακράν...

Πάντως ξέρεις καλά πως προσπαθούμε και προσπαθούμε ... και προσπαθούμε, έχουμε ακόμα πολλά να μάθουμε...

ΚΑΡΠΟΔΙΝΗΣ ΔΗΜΗΤΡΗΣ - KARPODINIS software

Link to comment
Share on other sites

ΓΕΙΑ  ΣΟΥ  GUS  ΑΘΑΝΑΤΕ.  ΕΒΓΑΛΕΣ ΚΑΙ ΑΥΤΟ ΣΕ ΕΞΕΛ;  ΕΙΣΑΙ ΚΑΙ Ο ΠΡΩΤΟΣ.  ΣΥΓΝΩΜΗ.  ΜΕΤΑ ΤΟΝ ΚΑΡΠΟΔΙΝΗ.  ΝΑΧΟΜΕ ΚΑΙ ΤΟ ΝΟΥ ΜΑΣ. ΜΗΝ ΦΑΜΕ ΚΑΙ ΚΑΜΙΑ ΚΑΛΠΑΖΙΑ.  ΕΝΤΑΞΥ ΚΑΡΠΟΔΙΝΗ; ΕΣΥ ΕΙΣΑΙ Ο ΠΡΩΤΟΣ. ΜΗΝ ΤΣΑΤΙΣΤΗΣ GUS ΓΙΑ ΤΑ ΠΡΩΤΙΑ.

Σχετικά με τις καρπαζιές να προσέχεις, σε έχει βάλει στο μάτι ο Μπαμπινιώτης!!!! :lol::lol::lol:

Link to comment
Share on other sites

  • 3 years later...
Guest olspookishmagus

Ένας αλγόριθμος για τον έλεγχο του ΑΦΜ πρέπει επίσης να ελέγχει ότι το άθροισμα των ψηφίων του ΑΦΜ που ελέγχεται είναι διαφορετικό του μηδενός.

Σε περίπτωση που το ΑΦΜ αποτελείται από 9 μηδενικά τότε το άθροισμα των επιμέρους γινομένων με τις δυνάμεις του 2 (ανάλογα την θέση των ψηφίων) θα είναι και αυτό μηδέν. Επομένως και το υπόλοιπο της διαίρεσης του με 11 επίσης 0 και όταν ελεγχθεί αν και το τελευταίο ψηφίο είναι 0 (που είναι) τότε αυτός ο καταφανέστατα μη έγκυρος ΑΦΜ θα περάσει ως έγκυρος.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...