Python Credit Card Validation

Ich bin ein Anfänger-Python-Anfänger, und ich bin derzeit auf Luhn-Algorithmus zum prüfen der credit card validation. Ich schrieb die meisten der code, aber ich bin stecken mit 2 Fehler, die ich bekommen 1. ist num verwiesen wird vor der Zuweisung. 2. ich bin immer object ist vom Typ '_io.TextIOWrapper' has no len(). Weitere Hilfe/Beratung wird sehr geschätzt.

Diese Schritte sind für Luhn-Algorithmus (Mod10 Check)

  1. Doppel-jedes zweite Ziffer von rechts nach Links. Wenn diese "Verdoppelung" Ergebnisse in eine zwei-stellige Zahl, fügen Sie die zwei-stellige
    Zahl um eine einzelne Ziffer.
  2. Nun fügen Sie alle einstelligen zahlen von Schritt 1.
  3. Fügen Sie alle Ziffern in den ungeraden Plätze von rechts nach Links in die Nummer der Kreditkarte.
  4. Summe der Ergebnisse aus den Schritten 2 & 3.
  5. Wenn das Ergebnis von Schritt 4 ist durch 10 teilbar, wird die Kartennummer gültig ist; andernfalls ist er ungültig.

Hier ist, was meine Ausgabe soll

Card Number         Valid / Invalid
--------------------------------------
3710293             Invalid
5190990281925290    Invalid
3716820019271998    Valid
37168200192719989   Invalid
8102966371298364    Invalid
6823119834248189    Valid

Und hier ist der code.

def checkSecondDigits(num):
    length = len(num)
    sum =  0
    for i in range(length-2,-1,-2):
      number = eval(num[i])
      number = number * 2
      if number > 9:
          strNumber = str(number)
          number = eval(strNumber[0]) + eval(strNumber[1])
          sum += number
      return sum

def odd_digits(num):
    length = len(num)
    sumOdd = 0
    for i in range(length-1,-1,-2):
        num += eval(num[i])
    return sumOdd

def c_length(num):
    length = len(num)
    if num >= 13 and num <= 16:
    if num [0] == "4" or num [0] == "5" or num [0] == "6" or (num [0] == "3" and num [1] == "7"):
        return True
    else:
        return False


def main():
    filename = input("What is the name of your input file? ")
    infile= open(filename,"r")
    cc = (infile.readline().strip())
    print(format("Card Number", "20s"), ("Valid /Invalid"))
    print("------------------------------------")
    while cc!= "EXIT":
        even = checkSecondDigits(num)
        odd = odd_digits(num)
        c_len = c_length(num)
        tot = even + odd

        if c_len == True and tot % 10 == 0:
            print(format(cc, "20s"), format("Valid", "20s"))
        else:
            print(format(cc, "20s"), format("Invalid", "20s"))
        num = (infile.readline().strip())

main()
  • Sollten Sie die traceback -, nicht nur die Fehlermeldung
  • even = checkSecondDigits(num)... Aktivieren Sie das Kontrollkästchen. Was ist Zahl? Das ist Ihr Erster Fehler
  • Traceback (most recent call last): Zeile 58, in <module> main () - Zeile 48, die im wesentlichen auch = checkSecondDigits(num) UnboundLocalError: lokale variable 'num' referenced before assignment
  • Wenn ich den code bekomme ich diesen Fehler
  • überprüfen Sie Ihre while, wo ist dieser num variable kommen?
  • eval(num[i]) <-- Gute Herr, WARUM?!? Mit eval hier ist mit einer Atombombe zu swat Fliegen; es funktioniert, aber es ist eine wirklich schlechte Idee. Sie wissen, sollten die Werte werden integer-Ziffern, verwenden Sie einfach int(num[i]); es ist schneller, sicherer und nicht aufrufen Cthulhu. In anderen Fällen, z.B. strNumber = str(number), number = eval(strNumber[0]) + eval(strNumber[1]) Sie tun können, Mathematik und vermeiden Sie die Konvertierung bei allen, z.B. number -= 9 (für 10-18, die Summe der zahlen ist die gleiche wie einfach nur zu subtrahieren 9) oder weniger geschickt number = number // 10 + number % 10.
  • Gut, dass die ganze Funktion gegeben wurde, um uns alle von unserem professor, so idk lol

InformationsquelleAutor Apurva Patel | 2016-11-19
Schreibe einen Kommentar