Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Copyright (c) 2021 Adam Charvát
- # Visa
- # - MII: 4
- # - IIN: (4)
- # - Length: 13 or 16 digits
- # Mastercard
- # - MII: 5
- # - IIN: (51 - 55)
- # - Length: 16 digits
- # American Express
- # - MII: 3
- # - IIN: (34, 37)
- # - Length: 15 digits
- import random
- from enum import Enum
- class Card(Enum):
- Visa = 0
- Mastercard = 1
- AmericanExpress = 2
- def computeCheckDigit(cardNumber):
- total = 0
- digits = cardNumber[::-1]
- for i in range(len(digits)):
- digit = int(digits[i])
- if i % 2 == 0:
- digit *= 2
- total += sum(map(int, str(digit)))
- return (total * 9) % 10
- def fillToLength(text, length):
- toAdd = length - len(text)
- for _ in range(toAdd):
- text += str(random.randint(0, 9))
- return text
- def genCardNumber(cardType):
- if cardType == Card.Visa:
- length = 16
- prefix = str(4)
- elif cardType == Card.Mastercard:
- length = 16
- prefix = str(random.randint(51, 55))
- elif cardType == Card.AmericanExpress:
- length = 15
- prefix = str(random.choice([34, 37]))
- else:
- raise Exception("Invalid card type!")
- cardNumber = fillToLength(prefix, length - 1)
- return cardNumber + str(computeCheckDigit(cardNumber))
- print("Visa: " + genCardNumber(Card.Visa))
- print("Mastercard: " + genCardNumber(Card.Mastercard))
- print("American Express: " + genCardNumber(Card.AmericanExpress))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement