updated cc cardType logic
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
7965d4056f
commit
4519c7af15
@ -52,26 +52,33 @@ extension InputField {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static func from(iin: Int) -> CreditCardType? {
|
static func from(cardNumber: String) -> CreditCardType {
|
||||||
switch iin {
|
let clean = cardNumber.filter { $0.isNumber }
|
||||||
case 4000...4999:
|
let firstNum = Int(clean.prefix(1)) ?? 0
|
||||||
|
let twoChar = Int(clean.prefix(2)) ?? 0
|
||||||
|
let threeChar = Int(clean.prefix(3)) ?? 0
|
||||||
|
let fourChar = Int(clean.prefix(4)) ?? 0
|
||||||
|
let sixChar = Int(clean.prefix(6)) ?? 0
|
||||||
|
|
||||||
|
if firstNum == 4 {
|
||||||
return .visa
|
return .visa
|
||||||
case 5100...5599, 2221...2720:
|
} else if twoChar == 34 || twoChar == 37 {
|
||||||
return .mastercard
|
|
||||||
case 3400...3499, 3700...3799:
|
|
||||||
return .amex
|
return .amex
|
||||||
case 6011, 6221...6229, 6440...6499, 6500...6599:
|
} else if (twoChar == 62 && !(sixChar >= 622126 && sixChar <= 622925)) || twoChar == 81 || (twoChar == 60 && fourChar != 6011) {
|
||||||
return .discover
|
|
||||||
case 3600...3699, 3800...3999:
|
|
||||||
return .dinersClub
|
|
||||||
case 3528...3589:
|
|
||||||
return .jcb
|
|
||||||
case 6200...6299, 6000...6010, 8100...8199:
|
|
||||||
return .unionPay
|
return .unionPay
|
||||||
default:
|
} else if (threeChar > 299 && threeChar <= 305) || threeChar == 309 || twoChar == 36 || twoChar == 38 || twoChar == 39 {
|
||||||
return nil
|
return .dinersClub
|
||||||
|
} else if fourChar == 6011 || (sixChar >= 622126 && sixChar <= 622925) || (threeChar >= 644 && threeChar <= 649) || twoChar == 65 {
|
||||||
|
return .discover
|
||||||
|
} else if fourChar >= 3528 && fourChar <= 3589 {
|
||||||
|
return .jcb
|
||||||
|
} else if (twoChar >= 51 && twoChar <= 55) || (sixChar >= 222100 && sixChar <= 272099) {
|
||||||
|
return .mastercard
|
||||||
|
} else {
|
||||||
|
return .generic
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CreditCardHandler: FieldTypeHandler {
|
class CreditCardHandler: FieldTypeHandler {
|
||||||
@ -171,13 +178,13 @@ extension InputField {
|
|||||||
defer { inputField.setNeedsUpdate() }
|
defer { inputField.setNeedsUpdate() }
|
||||||
|
|
||||||
guard rawNumber.count >= 4,
|
guard rawNumber.count >= 4,
|
||||||
let firstFourDigits = Int(String(rawNumber.prefix(4))),
|
let firstFourDigits = Int(String(rawNumber.prefix(4)))
|
||||||
let creditCardType = CreditCardType.from(iin: firstFourDigits) else {
|
else {
|
||||||
inputField.cardType = .generic
|
inputField.cardType = .generic
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
inputField.cardType = creditCardType
|
inputField.cardType = CreditCardType.from(cardNumber: rawNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal func maskCreditCardNumber(_ cardType: CreditCardType, number: String) -> String {
|
internal func maskCreditCardNumber(_ cardType: CreditCardType, number: String) -> String {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user