Credit Card Number Generator: Difference between revisions
From Leo's Notes
This page was last edited on 27 January 2014, at 07:40.
Created page with "I got bored one night and decided to create this as a quick exercise. This is a number generator that satisfies the luhn + MOD 10 algorithm that is used by credit card numbers..." |
No edit summary |
||
| Line 3: | Line 3: | ||
Different issuers/banks will use different prefixes. For instance, Visa will use values 40-49 while MasterCard uses 50-59. A complete list can be found on [http://en.wikipedia.org/wiki/List_of_Issuer_Identification_Numbers Wikipedia]. | Different issuers/banks will use different prefixes. For instance, Visa will use values 40-49 while MasterCard uses 50-59. A complete list can be found on [http://en.wikipedia.org/wiki/List_of_Issuer_Identification_Numbers Wikipedia]. | ||
== Code == | |||
<syntaxhighlight lang="python" line start="1" enclose="div"> | <syntaxhighlight lang="python" line start="1" enclose="div"> | ||
#!/usr/local/bin/python | #!/usr/local/bin/python | ||
| Line 21: | Line 22: | ||
for i in range(0, len(values)): | for i in range(0, len(values)): | ||
values[i] = randint(0, 9) | values[i] = randint(0, 9) | ||
return values | return values | ||
Latest revision as of 07:40, 27 January 2014
I got bored one night and decided to create this as a quick exercise. This is a number generator that satisfies the luhn + MOD 10 algorithm that is used by credit card numbers.
Different issuers/banks will use different prefixes. For instance, Visa will use values 40-49 while MasterCard uses 50-59. A complete list can be found on Wikipedia.
Code
#!/usr/local/bin/python
import sys
from random import randint
def pad(prefix, values):
prefix = str(prefix)
i = 0
for c in prefix:
values[i] = int(c)
i = i + 1
return values
def randomize(values):
for i in range(0, len(values)):
values[i] = randint(0, 9)
return values
def luhn_value(values):
sum = 0
i = 0
while i < len(values):
if i % 2 == 0:
value = values[i] * 2
# Since doubling a single value results in 2 <= i <= 18
# the sum of the digits is equivolant to subtracting 9
if value >= 10:
value = value - 9
else:
value = values[i]
sum = sum + value
i = i + 1
return (sum * 9) % 10
def generate(prefix = ""):
length = 15
values = [0]*length
prefix = str(prefix)
values = randomize(values)
values = pad(prefix, values)
check = luhn_value(values)
return "".join(str(n) for n in values) + str(check)
if len(sys.argv) == 2:
if sys.argv[1].isdigit():
print(generate(sys.argv[1]))
else:
print("Usage: cc.py [prefix]")
else:
print(generate())
Example
python cc.py 45 4539371684142703
python cc.py 55 5555576731917875