VatNumberKit Logo

VatNumberKit 是一个 Swift 库,用于在 iOS 和 macOS 上检查和验证增值税号(基于校验和 & 在线政府服务)。

目录

要求

交流

安装

Swift Package Manager

Swift Package Manager 是一种用于管理 Swift 代码分发的工具。 它与 Swift 构建系统集成,可自动执行下载、编译和链接依赖项的过程。

需要 Xcode 11+ 才能使用 Swift Package Manager 构建 VatNumberKit。

要使用 Swift Package Manager 将 VatNumberKit 集成到您的 Xcode 项目中,请将其添加到您的 Package.swift 的 dependencies 值中。

dependencies: [
    .package(url: "https://github.com/frederik-jacques/vatnumberkit.git", .upToNextMajor(from: "0.1.0"))
]

手动

如果您不想使用 Swift Package Manager,您可以手动将 VatNumberKit 集成到您的项目中。


使用

验证增值税号格式

使用静态方法 VatNumberKit.validateFormat(vatNumber:) 来检查增值税号格式(基于正则表达式)是否有效。

此调用的结果返回一个 VatNumberKit.ValidationOutput 对象,该对象具有以下属性。

示例

import VatNumberKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        if let validationOutput = VatNumberKit.validateFormat(vatNumber: "BE0651634023"), validationOutput.isValid {
            print("The VAT number has a valid format")
        }
        
    }
}

验证增值税校验和

使用静态方法 VatNumberKit.validateChecksum(rawVatNumber:) 来检查给定增值税号的校验和是否有效。

此调用的结果返回一个 Boolean,指示校验和是否正确。

示例

import VatNumberKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        if VatNumberKit.validateChecksum(rawVatNumber: "BE0651634023"){
            print("The VAT number has a valid checksum")
        }
        
    }
}

在线增值税号验证

VatNumberKit 还允许您根据 2 项在线服务验证增值税号。

使用静态方法 VatNumberKit.validateOnline(vatNumber:completionHandler:) 来使用在线验证。

VatNumberKit 将根据国家/地区代码自动选择正确的服务。

示例

VatNumberKit.validateOnline(vatNumber: "GB835145337") { result in
    switch result {
    case .success(let validation):
        if validation.isValid {
            // Retrieve the meta data for this VAT number (name & address)
            // Metadata is not always available.
            if let metaData = validation.metaData {
                print("§§ Name - \(metaData.name)")
                print("§§ Address - \(metaData.address)")
            }
        }
        else {
            print("§§ VAT number is not valid")
        }
        
    case .failure(let error):
        print("Error validating number")
        if let validationError = error as? VatNumberKit.ValidationServiceError {
            switch validationError {
            case .invalidUrl:
                print("The request url was not valid")
                
            case .invalidJsonResponse:
                print("The json returned from the service is invalid")
                
            case .invalidUrlResponse:
                print("The response returned from the service is invalid")
                
            case .validationServiceDown:
                print("The validation services is down")
                
            case .vatNumberHasIncorrectNumberOfDigits:
                print("The supplied VAT number has an incorrect number of digits (UK service only)")
                
            case .vatNumberDoesNotMatchRegisteredCompany:
                print("The supplied VAT number does not match a registered company (UK service only)")                        
            }
        }
        else {
            // Regular error
        }
    }

在字符串中搜索增值税号

使用静态方法 VatNumberKit.searchVatNumbersInText(:applyChecksumValidation:) 在文本中查找增值税号。

此方法返回一个 VatNumberKit.ValidationOutput 结构的 Set。

示例

import VatNumberKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let validationObjects = VatNumberKit.searchVatNumbersInText(text: "This is a VAT number that is BE0651634023 somewhere in the text. \n Apple's Belgian VAT number is BE0842936235")
        // Will contain 2 VatNumberKit.ValidationOutput structs.
        
    }
}

支持的国家/地区

国家/地区 离线格式验证(正则表达式) 离线校验和验证 在线验证
奥地利
比利时
保加利亚
克罗地亚
塞浦路斯
捷克共和国
丹麦
爱沙尼亚
欧洲实体
芬兰
法国
德国
英国
希腊
匈牙利
爱尔兰
意大利
拉脱维亚
立陶宛
卢森堡
马耳他
荷兰
北爱尔兰
波兰
葡萄牙
罗马尼亚
斯洛伐克
斯洛文尼亚
西班牙
瑞典

请随时打开 PR 以添加其他国家/地区!

鸣谢

用于查找有关校验和的更多信息的来源,因为似乎每个国家/地区都忘记记录它是如何计算的 :)

许可证

VatNumberKit 在 MIT 许可证下发布。 有关详细信息,请参阅 LICENSE。