Skip to content

Instantly share code, notes, and snippets.

@MMnasrabadi
Created June 30, 2020 05:10
Show Gist options
  • Save MMnasrabadi/088d6603b819391e281c8e530797a2c4 to your computer and use it in GitHub Desktop.
Save MMnasrabadi/088d6603b819391e281c8e530797a2c4 to your computer and use it in GitHub Desktop.
Check iranian Bank Card Validation
// Create by love : Mohammad Nasrabadi [github](https://github.com/mmnasrabadi)
iranianBankCardCheck(5041721046432655)
iranianBankCardCheck(6037997561388217)
iranianBankCardCheck(6362141802359837)
iranianBankCardCheck(6273811616832991)
iranianBankCardCheck(6037997561388217)
iranianBankCardCheck(6104337824093650)
iranianBankCardCheck(3982309207502750)
iranianBankCardCheck(2412345245245251)
func iranianBankCardCheck(_ number: Int) -> Bool {
let card = number.digits.dropLast()
guard isInRengIranCard(zeroNumber: card[0]) else {
return false
}
let a = card.enumerated().filter { $0.offset.isMultiple(of: 2) }.compactMap { $0.element * 2 }.compactMap { $0>9 ? ($0-9) : ($0) }.reduce(0 , +)
let b = card.enumerated().filter { !($0.offset.isMultiple(of: 2)) }.compactMap { $0.element * 1 }.reduce(0 , +)
if (a + b + (number.digits.last ?? 0)).isMultiple(of: 10) {
return true
}
return false
}
func isInRengIranCard(zeroNumber: Int) -> Bool {
for i in [2,4,5,6,9] {
if zeroNumber == i {
return true
}
}
return false
}
extension LosslessStringConvertible {
var string: String { .init(self) }
}
extension Numeric where Self: LosslessStringConvertible {
var digits: [Int] { string.digits }
}
extension StringProtocol {
var digits: [Int] { compactMap(\.wholeNumberValue) }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment