-
Notifications
You must be signed in to change notification settings - Fork 122
/
Luhn's Algo
96 lines (82 loc) · 2.2 KB
/
Luhn's Algo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# -*- -*-
"""
"""
import numpy as np
import pandas as pd
def get_even_odd_indexed_digits(credit_card_number, len_number):
odd_list = []
even_list = []
for i in range(0, len_number):
if i%2 == 1:
odd_list.append(int(credit_card_number[i]))
else:
even_list.append(int(credit_card_number[i]))
return np.array(odd_list, dtype = int), np.array(even_list, dtype = int)
def odd_indexed_array_operations(array_odd):
list_modulo = []
len_odd = len(array_odd)
array_odd = 2*array_odd
for i in range(0, len_odd):
if(int(array_odd[i]/(10)) == 0):
list_modulo.append(array_odd[i])
else:
list_modulo.append(int(array_odd[i]%10))
list_modulo.append(int(array_odd[i]/10))
return np.array(list_modulo, dtype = int)
def get_sum(array_modulo, array_even):
sum_modulo = np.sum(array_modulo, axis = 0)
sum_even = np.sum(array_even, axis = 0)
sum_required = sum_even + sum_modulo
return sum_required
def validate_credit_card(credit_card_number):
len_number = len(credit_card_number)
array_odd, array_even = get_even_odd_indexed_digits(credit_card_number, len_number)
array_modulo = odd_indexed_array_operations(array_odd)
sum_required = get_sum(array_modulo, array_even)
if(int(sum_required % 10) == 0):
return 1
else:
return 0
amex = "378282246310000"
if(validate_credit_card(amex) == 1):
print("Credit card is legit!")
else:
print("Credit card is faulty")
#def luhnalg(num):
# a=num
# count=0
# while a>=1:
# a//=10
# count+=1
# l=0
# m=0
# n=0
# o=0
# p=0
# for i in range(2,count+1,2):
# k=i-1
# digit=num%10**i
# digit=digit//10**k
# digit*=2
# if digit>10:
# l=digit
# m=l%10
# n=l//10
# o=m+n
# else:
# p+=digit
# total=o+p
#
# t=0
# for i1 in range(1,count+1,2):
# k1=i1-1
# dig=num%10**i1
# dig=dig//10**k1
# t=+dig
#
# grandtot=total+t
#
# if grandtot%10==0:
# print('valid')
# else:
# print('Not valid')