gpt4 book ai didi

ios - IBAN 验证器 Swift

转载 作者:搜寻专家 更新时间:2023-10-30 22:23:58 28 4
gpt4 key购买 nike

我正在编写一种算法来验证 Swift 3 中的 IBAN(国际银行帐号),但无法计算其中一个验证。

示例 IBAN - BE68539007547034

这里是要验证的规则-

  1. 输入数字的长度应为 16。
  2. 前 2 个字符是国家代码(不是数字)。
  3. 最后 14 位是数字。
  4. 最后 2 个字符是前 12 个数字字符的模 97 结果。

虽然 #1 - #3 很清楚,但我需要澄清 #4。如果有人以前做过这件事并且知道这件事,请告诉我。

最佳答案

如果您遵循 wikipedia 上的算法,验证算法会相当简单:

extension String {
private func mod97() -> Int {
let symbols: [Character] = Array(self)
let swapped = symbols.dropFirst(4) + symbols.prefix(4)

let mod: Int = swapped.reduce(0) { (previousMod, char) in
let value = Int(String(char), radix: 36)! // "0" => 0, "A" => 10, "Z" => 35
let factor = value < 10 ? 10 : 100
return (factor * previousMod + value) % 97
}

return mod
}

func passesMod97Check() -> Bool {
guard self.characters.count >= 4 else {
return false
}

let uppercase = self.uppercased()

guard uppercase.range(of: "^[0-9A-Z]*$", options: .regularExpression) != nil else {
return false
}

return (uppercase.mod97() == 1)
}
}

用法:

let iban = "XX0000000..."
let valid = iban.passesMod97Check()

如果要验证特定国家/地区的格式,只需修改正则表达式,例如

"^[A-Z]{2}[0-9]{14}$"

或直接

"^BE\\d{14}$"

关于ios - IBAN 验证器 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43803956/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com