Skip to content

Instantly share code, notes, and snippets.

@nikolay-kapustin
Last active March 25, 2020 12:53
Show Gist options
  • Save nikolay-kapustin/62f4b2113ae73d4761d2c3373f624a7d to your computer and use it in GitHub Desktop.
Save nikolay-kapustin/62f4b2113ae73d4761d2c3373f624a7d to your computer and use it in GitHub Desktop.
Проверка ИНН на валидность. Алгоритм на Swift. #swift #inn #tin
class INNTests: XCTestCase {
override func setUp() {
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func testInn() {
func checkInn(_ inn:String) -> Bool {
let len = inn.count
let inn:[Int] = inn.compactMap{$0.wholeNumberValue}
guard len == inn.count else {return false}
let controlTen = [2,4,10,3,5,9,4,6,8]
let controlEleven1 = [7,2,4,10,3,5,9,4,6,8]
let controlEleven2 = [3,7,2,4,10,3,5,9,4,6,8]
switch len {
case 10:
return inn[9] == ((inn.dropLast().enumerated().map{$0.element * controlTen[$0.offset]}).reduce(0, +) % 11) % 10
case 12:
return inn[10] == ((inn.dropLast(2).enumerated().map{
$0.element * controlEleven1[$0.offset]
}).reduce(0, +) % 11) % 10
&& inn[11] == ((inn.dropLast().enumerated().map{$0.element * controlEleven2[$0.offset]}).reduce(0, +) % 11) % 10
default:
return false
}
}
let testing = ["132202672804", "7714406168", "7744001497", "1234567890"]
let results = testing.map{checkInn($0)}
_ = results.dropLast().map{assert($0, "Failed check INN!")}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment