Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Different kinds of credit cards.
- *
- * Reference from [credit-card-type](https://github.com/braintree/credit-card-type)
- */
- sealed class CreditCardType {
- abstract val name: String
- abstract val prefixPattern: Regex
- abstract val gaps: IntArray
- abstract val lengths: IntArray
- abstract val securityCodeLength: Int
- companion object {
- private val types: List<CreditCardType> = listOf(Visa, MasterCard, AmericanExpress, DinersClub, Discovery, Jcb, UnionPay, Maestro)
- fun matchCardNumber(cardNumber: String): List<CreditCardType> = types.filter { type -> type.prefixPattern.find(cardNumber) != null }
- fun matchName(name: String): CreditCardType = types.first { type -> type.name == name }
- fun getIcon(cardType: CreditCardType): Int = when (cardType) {
- Visa -> R.drawable.ic_credit_card_visa
- MasterCard -> R.drawable.ic_credit_card_mastercard
- AmericanExpress -> R.drawable.ic_credit_card_amerian_express
- DinersClub -> R.drawable.ic_credit_card_dinerclub
- Discovery -> R.drawable.ic_credit_card_discover
- Jcb -> R.drawable.ic_credit_card_jcb
- UnionPay -> R.drawable.ic_credit_card_unionpay
- Maestro -> R.drawable.ic_credit_card_maestro
- }
- fun getSmallIcon(cardType: CreditCardType): Int = when (cardType) {
- Visa -> R.drawable.ic_credit_card_visa_small
- MasterCard -> R.drawable.ic_credit_card_mastercard_small
- AmericanExpress -> R.drawable.ic_credit_card_amerian_express_small
- DinersClub -> R.drawable.ic_credit_card_dinerclub_small
- Discovery -> R.drawable.ic_credit_card_discover_small
- Jcb -> R.drawable.ic_credit_card_jcb_small
- UnionPay -> R.drawable.ic_credit_card_unionpay_small
- Maestro -> R.drawable.ic_credit_card_maestro_small
- }
- }
- }
- object Visa : CreditCardType() {
- override val name: String = "visa"
- override val prefixPattern: Regex = Regex("""^4""")
- override val gaps: IntArray = intArrayOf(4, 8, 12)
- override val lengths: IntArray = intArrayOf(16, 18, 19)
- override val securityCodeLength: Int = 3
- }
- object MasterCard : CreditCardType() {
- override val name: String = "master-card"
- override val prefixPattern: Regex = Regex("""^(5[1-5]|222[1-9]|2[3-6]|27[0-1]|2720)""")
- override val gaps: IntArray = intArrayOf(4, 8, 12)
- override val lengths: IntArray = intArrayOf(16)
- override val securityCodeLength: Int = 3
- }
- object AmericanExpress : CreditCardType() {
- override val name: String = "american-express"
- override val prefixPattern: Regex = Regex("""^3[47]""")
- override val gaps: IntArray = intArrayOf(4, 10)
- override val lengths: IntArray = intArrayOf(15)
- override val securityCodeLength: Int = 4
- }
- object DinersClub : CreditCardType() {
- override val name: String = "diners-club"
- override val prefixPattern: Regex = Regex("""^3(0[0-5]|[689])""")
- override val gaps: IntArray = intArrayOf(4, 10)
- override val lengths: IntArray = intArrayOf(14, 16, 19)
- override val securityCodeLength: Int = 3
- }
- object Discovery : CreditCardType() {
- override val name: String = "discover"
- override val prefixPattern: Regex = Regex("""^(6011|65|64[4-9])""")
- override val gaps: IntArray = intArrayOf(4, 8, 12)
- override val lengths: IntArray = intArrayOf(16, 19)
- override val securityCodeLength: Int = 3
- }
- object Jcb : CreditCardType() {
- override val name: String = "jcb"
- override val prefixPattern: Regex = Regex("""^(2131|1800|35)""")
- override val gaps: IntArray = intArrayOf(4, 8, 12)
- override val lengths: IntArray = intArrayOf(16)
- override val securityCodeLength: Int = 3
- }
- object UnionPay : CreditCardType() {
- override val name: String = "unionpay"
- override val prefixPattern: Regex = Regex("""^(((620|(621(?!83|88|98|99))|622(?!06|018)|62[3-6]|627[02,06,07]|628(?!0|1)|629[1,2]))\d*|622018\d{12})""")
- override val gaps: IntArray = intArrayOf(4, 8, 12)
- override val lengths: IntArray = intArrayOf(16, 17, 18, 19)
- override val securityCodeLength: Int = 3
- }
- object Maestro : CreditCardType() {
- override val name: String = "maestro"
- override val prefixPattern: Regex = Regex("""^(5[06-9]|6[37])""")
- override val gaps: IntArray = intArrayOf(4, 8, 12)
- override val lengths: IntArray = intArrayOf(12, 13, 14, 15, 16, 17, 18, 19)
- override val securityCodeLength: Int = 3
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement