Spaces:
Sleeping
Sleeping
import gradio as gr | |
def check_credit_card(card_number: str): | |
card_number = card_number.replace(" ", "") # remove spaces | |
if not card_number.isdigit(): # check if the input is numeric | |
return "Invalid input. Please enter a numeric credit card number." | |
card_number = int(card_number) | |
# convert card number to string to easily calculate its length | |
card_number_str = str(card_number) | |
digit = len(card_number_str) | |
# check if the card number has a valid length | |
if digit != 13 and digit != 16 and digit != 15: | |
return "INVALID" | |
# split the card number into individual digits and store them in a list | |
number = [int(x) for x in card_number_str[::-1]] | |
original_number = number.copy() # create a copy of the number list | |
# apply Luhn's algorithm | |
for i in range(1, digit, 2): | |
original_number[i] *= 2 | |
# sum the digits of the numbers in original_number | |
v = sum(sum(divmod(x, 10)) for x in original_number) | |
# check if the card is a Visa, MasterCard, or American Express card | |
if digit == 13: | |
if number[-1] == 4 and v % 10 == 0: | |
return "VISA" | |
elif digit == 15: | |
if number[-1] == 3 and v % 10 == 0 and number[-2] in [4, 7]: | |
return "AMEX" | |
elif digit == 16: | |
if number[-1] == 4 and v % 10 == 0: | |
return "VISA" | |
elif number[-1] == 5 and v % 10 == 0 and number[-2] in [1, 2, 3, 4, 5]: | |
return "MASTERCARD" | |
return "INVALID" | |
iface = gr.Interface(fn=check_credit_card, | |
inputs=gr.inputs.Textbox(label="Credit Card Number"), | |
outputs="text", | |
layout="vertical", | |
title="Arasy's credit/debit card checker" | |
) | |
iface.launch() | |