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? {
|
||||
switch iin {
|
||||
case 4000...4999:
|
||||
static func from(cardNumber: String) -> CreditCardType {
|
||||
let clean = cardNumber.filter { $0.isNumber }
|
||||
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
|
||||
case 5100...5599, 2221...2720:
|
||||
return .mastercard
|
||||
case 3400...3499, 3700...3799:
|
||||
} else if twoChar == 34 || twoChar == 37 {
|
||||
return .amex
|
||||
case 6011, 6221...6229, 6440...6499, 6500...6599:
|
||||
return .discover
|
||||
case 3600...3699, 3800...3999:
|
||||
return .dinersClub
|
||||
case 3528...3589:
|
||||
return .jcb
|
||||
case 6200...6299, 6000...6010, 8100...8199:
|
||||
} else if (twoChar == 62 && !(sixChar >= 622126 && sixChar <= 622925)) || twoChar == 81 || (twoChar == 60 && fourChar != 6011) {
|
||||
return .unionPay
|
||||
default:
|
||||
return nil
|
||||
} else if (threeChar > 299 && threeChar <= 305) || threeChar == 309 || twoChar == 36 || twoChar == 38 || twoChar == 39 {
|
||||
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 {
|
||||
@ -171,13 +178,13 @@ extension InputField {
|
||||
defer { inputField.setNeedsUpdate() }
|
||||
|
||||
guard rawNumber.count >= 4,
|
||||
let firstFourDigits = Int(String(rawNumber.prefix(4))),
|
||||
let creditCardType = CreditCardType.from(iin: firstFourDigits) else {
|
||||
let firstFourDigits = Int(String(rawNumber.prefix(4)))
|
||||
else {
|
||||
inputField.cardType = .generic
|
||||
return
|
||||
}
|
||||
|
||||
inputField.cardType = creditCardType
|
||||
inputField.cardType = CreditCardType.from(cardNumber: rawNumber)
|
||||
}
|
||||
|
||||
internal func maskCreditCardNumber(_ cardType: CreditCardType, number: String) -> String {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user