Βρήκα τις προάλλες ένα αλγόριθμο που καθορίζει πότε μια πιστωτική κάρτα είναι έγκυρη.Πρίν αρχίσουμε να σας πώ ότι άλλο είναι μια κάρτα να είναι έγκυρη και άλλο να συνδέεται και σε κάποιο λογαριασμό.Γιαυτό θα πρέπει να ψάξετε σε ένα credit card server γιατί ο παρακάτω κώδικας δέν θα σας βοηθήσει.
Ο αλγόριθμος του Luhn's – όπως λέγετε – προέρχεται απο τον Hans Peter Luhn, επιστήμονα τής IBM. Η διαδικασία δεν είναι ιδιαίτερα δύσκολή.Ας πούμε οτι έχουμε έναν τυχαίο αριθμό κάρτας 3452 4533 2222 9581. Θα δούμε τώρα αν αυτός ο αριθμός είναι έγκυρος. Πρώτα γράφουμε τα ψηφία αναλυτικά και μετά όσα ψηφία έχουν μονή θέση, τα πολλαπλασιάζουμε με το 2.Δηλαδή το πρώτο ψηφίο το τρίτο και πάει λέγοντας.Στο τρίτο βήμα από όσα ψηφία έχουν πάει στο 10 ή το έχουν ξεπεράσει, αφαιρούμε 9.
1      2      3     4    5    6     7    8   9   10   11  12   13    14  15    16      θέση ψηφίων
       | 3 | 4 | 5 | 2 | 4 | 5 | 3 | 3 | 2 | 2 | 2 | 2 | 9 | 5 | 8 | 1 | 
       | 6 | 4 | 10 | 2 | 8 | 5 | 6 | 3 | 4 | 2 | 4 | 2 | 18 | 5 | 16 | 1 | 
       | 6 | 4 | 1 | 2 | 8 | 5 | 6 | 3 | 4 | 2 | 4 | 2 | 9 | 5 | 7 | 1 | 
Στο τελευταίο βήμα πρέπει να προσθέσουμε όλα τα ψηφία.Αν το αποτέλεσμα διαιρείται ακριβός με το 10, σημαίνει ότι ο αριθμός της κάρτας είναι έγκυρος. Εδώ πρέπει να έχουμε σύνολο 69 που δείχνει ότι δέν διαιρείται ακριβός με το 10, άρα η κάρτα δέν ισχύει. 
Άν προσθέσουμε ένα στο τελευταίο ψηφίο, το check digit όπως λέγεται, τότε θα πάρουμε σύνολο 70, που μας δίνει έναν έγκυρο αριθμό κάρτας. 
Με λίγα λογία αυτή είναι η διεργασία κάθε φορά, απλά εμείς έχουμε έτοιμο τον κώδικα για το πρόγραμμα μας και έτσι δέν χρειάζεται να μπαίνουμε σε λεπτομέρειες.Ο κώδικας είναι ο παρακάτω.
Private Function ValidateLuhn(ByVal value As String) As Boolean    
Dim CheckSum As Integer = 0     
Dim DoubleFlag As Boolean = (value.Length Mod 2 = 0)     
Dim Digit As Char     
Dim DigitValue As Integer     
For Each Digit In value     
DigitValue = Integer.Parse(Digit)     
If DoubleFlag Then     
DigitValue *= 2     
If DigitValue > 9 Then     
DigitValue -= 9     
End If     
End If     
CheckSum += DigitValue     
DoubleFlag = Not DoubleFlag     
Next     
Return (CheckSum Mod 10 = 0)     
End Function
Ανάλογα λοιπόν αν η validateLuhn() σας δίνει true η false,θα ξέρετε αν η κάρτα είναι έγκυρη η όχι.
Άν θέλετε να μάθετε περισσότερα για τις κάρτες, τότε αρχίστε από το 
http://www.merriampark.com/anatomycc.htm     
Έχω γράψει και ένα μικρό παράδειγμα που μπορείτε να δείτε πώς δουλεύει ο κώδικας.
Κατεβάστε τον κώδικα του παραδείγματος.