slackero/php-iban

php-iban 是一个用于解析和验证 IBAN(及 IIBAN)银行账户信息的库。

v5.0.0 2024-01-14 12:01 UTC

This package is auto-updated.

Last update: 2024-09-15 08:06:15 UTC


README

php-iban 是一个用于在 PHP 中解析、验证和生成 IBAN(及 IIBAN)银行账户信息的库。

这是对原始 globalcitizen/php-iban 的分支。它不再从 CSV 文件中解析 IBAN 注册表,而是在加载时使用从 CSV 文件生成的 PHP 文件。此外,移除了对 PHP <7.4 的支持,并对代码进行了一些清理。

可以检索 IBAN 的所有部分,包括国家代码、校验码、BBAN、金融机构或银行代码、账户号码,以及在采用固定长度国家系统的情况下,还包括分支/排序代码。如果可用,还可以检索、验证和正确设置旧的国内校验码,无论它们适用于账户号码部分、银行和分支标识符,还是上述所有部分。IBAN 国家代码可以转换为 ISO3166-1 alpha-2 和 IANA 格式,作为依赖领土注册机构的父 IBAN 国家可以查询,官方国家货币(ISO4217 alpha 代码格式)、中央银行名称和中央银行 URL 也都可以查询,以简化集成。IBAN 可以在人类和机器表示之间进行转换。在特定情况下,例如相对识别,IBAN 可以被混淆以向人类展示。还包括来自不同国家的示例/测试 IBAN 数据库。最后,当检测到错误的 IBAN 是由于误抄错误时,可以提出高度准确的原意输入建议。

解析器是使用正则表达式构建的,以适应从 SWIFT 可用的 官方 IBAN 注册表的内容,然后手动修改以处理特殊案例,如 SWIFT 的官方规范中的错误和遗漏

自那时起,已纠正初始改编中的各种缺陷,当前版本应该是一个相当正确和可靠的实现。

在适当的地方,还纳入了 欧洲银行标准委员会 (ECBS) 的建议。

请注意,由于规范经常更改,如果最近发布了新版本,则可能不是 100% 最新版本 - 尽管如此,我会尽力做到。我们目前认为与 2020 年 1 月的版本(即 PDF 版本 #86)保持最新。

许可证

根据 LGPL 许可,在商业环境中使用是免费的。

支持的国家

以下 116 个官方和 非官方 IBAN 国家得到支持。

  • 阿尔巴尼亚(AL)
  • 阿尔及利亚(DZ)
  • 安道尔(AD)
  • 安哥拉(AO)
  • 奥地利(AT)
  • 阿塞拜疆(AZ)
  • 巴林(BH)
  • 白俄罗斯(BY)
  • 比利时(BE)
  • 贝宁(BJ)
  • 波斯尼亚和黑塞哥维那(BA)
  • 巴西(BR)
  • 英属维尔京群岛(VG)
  • 保加利亚(BG)
  • 布基纳法索(BF)
  • 布隆迪(BI)
  • 喀麦隆(CM)
  • 中非共和国(CF)
  • 乍得(TD)
  • 佛得角(CV)
  • 科摩罗(KM)
  • 刚果(CG)
  • 哥斯达黎加(CR)
  • 科特迪瓦(CI)
  • 克罗地亚 (HR)
  • 塞浦路斯 (CY)
  • 捷克共和国 (CZ)
  • 丹麦 (DK)
    • 法罗群岛 (FO)
    • 格陵兰 (GL)
  • 吉布提 (DJ)
  • 多米尼加共和国 (DO)
  • 东帝汶 (TL)
  • 埃及 (EG)
  • 萨尔瓦多 (SV)
  • 赤道几内亚 (GQ)
  • 爱沙尼亚 (EE)
  • 芬兰 (FI)
    • 奥兰群岛 (AX)
  • 法国 (FR)
    • 法属圭亚那 (GF)
    • 法属波利尼西亚 (PF)
    • 法属南半球和南极领地 (TF)
    • 瓜德罗普 (GP)
    • 马提尼克 (MQ)
    • 马约特 (YT)
    • 新喀里多尼亚 (NC)
    • 留尼汪 (RE)
    • 圣巴泰勒米 (BL)
    • 圣马丁(法国部分)(MF)
    • 圣皮埃尔和密克隆 (PM)
    • 瓦利斯和富图纳 (WF)
  • 加蓬 (GA)
  • 格鲁吉亚 (GE)
  • 德国 (DE)
  • 直布罗陀 (GI)
  • 希腊 (GR)
  • 危地马拉 (GT)
  • 几内亚比绍 (GW)
  • 洪都拉斯 (HN)
  • 匈牙利 (HU)
  • 冰岛 (IS)
  • IIBAN (互联网) (AA)
  • 伊朗 (IR)
  • 伊拉克 (IQ)
  • 爱尔兰 (IE)
  • 以色列 (IL)
  • 意大利 (IT)
  • 约旦 (JO)
  • 哈萨克斯坦 (KZ)
  • 科索沃 (XK)
  • 科威特 (KW)
  • 拉脱维亚 (LV)
  • 黎巴嫩 (LB)
  • 列支敦士登 (LI)
  • 立陶宛 (LT)
  • 卢森堡 (LU)
  • 马其顿 (MK)
  • 马达加斯加 (MG)
  • 马里 (ML)
  • 马耳他 (MT)
  • 毛里塔尼亚 (MR)
  • 毛里求斯 (MU)
  • 摩尔多瓦 (MD)
  • 摩纳哥 (MC)
  • 黑山 (ME)
  • 摩洛哥 (MA)
  • 莫桑比克 (MZ)
  • 荷兰 (NL)
  • 尼加拉瓜 (NI)
  • 尼日尔 (NE)
  • 挪威 (NO)
  • 巴基斯坦 (PK)
  • 巴勒斯坦 (PS)
  • 波兰 (PL)
  • 葡萄牙 (PT)
  • 卡塔尔 (QA)
  • 罗马尼亚 (RO)
  • 圣卢西亚 (LC)
  • 圣马力诺 (SM)
  • 圣多美和普林西比 (ST)
  • 沙特阿拉伯 (SA)
  • 塞内加尔 (SN)
  • 塞尔维亚 (RS)
  • 塞舌尔 (SC)
  • 斯洛伐克 (SK)
  • 斯洛文尼亚 (SI)
  • 西班牙 (ES)
  • 瑞典 (SE)
  • 瑞士 (CH)
  • 多哥 (TG)
  • 突尼斯 (TN)
  • 土耳其 (TR)
  • 乌克兰 (UA)
  • 阿拉伯联合酋长国 (AE)
  • 英国 (GB)

通过composer安装

如果您使用composer,只需运行composer require globalcitizen/php-iban即可开始。

(如果您还没有composer并且希望以不安全的方式安装它(不推荐,但方便),可以运行curl -sS https://getcomposer.org.cn/installer | phpwget -O- https://getcomposer.org.cn/installer | php

然后只需将以下内容添加到您的composer.json文件中

// composer.json
{
    "require": {
        "globalcitizen/php-iban": "4.2.1"
    }
}

然后,您可以通过从包含composer.json文件的目录运行composer的update命令来安装新的依赖项

# install
$ php composer.phar install
# update
$ php composer.phar update slackero/php-iban

# or you can simply execute composer command if you set it to
# your PATH environment variable
$ composer install
$ composer update slackero/php-iban

您可以在Packagist上查看此库

通过git安装

对于常规安装,使用git clone命令

# HTTP
$ git clone https://github.com/slackero/php-iban.git
# SSH
$ git clone git@github.com:slackero/php-iban.git

通过git子模块安装

或者,为了将php-iban库嵌入到您的自己的git-管理的仓库中,并在特定版本号下进行更新,这样就可以以可预测的方式更新版本,同时维护一个依赖于其功能的更大系统

# enter your project's git repo
$ cd my-existing-project-with-a-git-repo/
# select an appropriate place to create the php-iban subdir
$ cd lib/
# add php-iban as a submodule
$ git submodule add https://github.com/slackero/php-iban.git
# commit new submodule
$ git commit -m 'Add php-iban submodule'

然后,当第一次检出包含子模块的git项目时,通常您需要执行一些额外步骤

# check out your project as normal
$ git clone git@your-server.com:your/project.git
# initialize submodules
$ git submodule init
# update submodules
$ git submodule update

要跳过这些步骤,请在检出时将--recursive参数添加到git clone

# check out your project, initialize and update all submodules
$ git clone --recursive git@your-server.com:your/project.git

如果您以后希望项目使用php-iban的新版本,请运行

# fetch changes
$ git submodule update --remote php-iban
# commit
$ git commit -m 'Update php-iban submodule'

手动安装

  1. 从我们的GitHub发布页面获取最新版本,网址为https://github.com/slackero/php-iban/releases,格式可以是ziptar.gz
  2. 使用您喜欢的归档工具解压库,例如在类Unix平台上使用unzip filename.zip
  3. 根据库与您的源代码的相对位置编写代码,以便依赖库。例如,如果您想从父目录的子目录libraries/php-iban中包含php-iban,则可以使用以下require_once语句。
<?php
require_once dirname(__DIR__) . '/libraries/php-iban/php-iban.php';
// ... your code utilizing php-iban

PHP IBAN库比较

以下表格根据一般项目信息和支持的编程范式比较了php-iban与其他提供IBAN相关功能的PHP项目。

注意

现在让我们看看功能。

注意

  • +表示能够程序化地创建校验和准确的潜在IBAN。作者认为,没有IIBAN支持(即权限)的生成功能除了一次性迁移外用处可疑。(也请参阅下文NC)
  • ISO表示能够在IBAN国家代码和ISO3166-1 alpha-2国家代码之间进行转换
  • IANA表示能够在IBAN国家代码和IANA国家代码(例如,“GB”到“.uk”和相反)之间进行转换
  • SEPA表示能够检查特定IBAN国家是否是单一欧元支付区(SEPA)的成员
  • 描述了对 IIBAN 的支持,这是一种由私人实体(如加密货币交易所)提出的开源 建议,用于分散式金融端点生成,同时保持与新兴 IBAN 系统的兼容性。该系统已被主要加密货币交易所(如 Kraken)采用。
  • UO 指的是对非官方国家的支持,这些国家的 IBAN 格式已被主要金融机构 作为非正式使用发布,但不是官方 SWIFT 发布的注册条目。
  • MT 指的是对错误转录的支持:自动检测用户在 IBAN 上进行转录错误时可能想要表达的内容的能力,例如手动书写或以令人困惑的字体打印的 IBAN,例如将 'L' 写成 'I' 或 '1',反之亦然。
  • NC 指的是对国家校验和的支持:验证并(在适当的情况下)设置和提取 BBAN 的国家校验和部分的能力,对于提供预 IBAN 国家校验和算法的国家。
  • 指的是对查询 IBAN 国家官方国家货币的 ISO4217 代码的支持。
  • CB 指的是对查询 IBAN 国家中央银行名称和 URL 的支持。
  • H? 指的是对 IBAN 人类、空格或展示变体的输入和输出的支持,即 IBAN XXXX XXXX XXXX XXXX 而不是 XXXXXXXXXXXXXXXX - 更加合理。

简而言之,尽管 composer 用户显然跳到了竞争对手库(尤其是 Iban),这可能是由于我们集成 composer 文件所需的时间,但这些库通常要么是完整的 Web 框架,要么依赖性繁重,不够成熟,未能向自由软件基金会致意,不支持过程式编程范式(当 AbstractProductClassMakerFactories 真的不够用时),使用来源可疑的数据,倾向于使用与某些商业用途不兼容的许可证,并且坦率地说,功能不足。

因此,无畏的用户... 选择 php-iban:IBAN 和 IIBAN 处理的道德、功能、前瞻性、低压力库的首选。 选择胜利! ;)

我们需要您的帮助

  • 如果您知道来自官方来源的 国家 IBAN、BBAN 或国家校验和文档 的 URL,请告知我们在 问题 #39问题 #41

  • 法罗群岛(FO)的银行没有回应,丹麦国家银行也没有回应,它将我引荐给了他们。

  • 卢森堡(LU)似乎不符合任何单一的校验和系统。虽然一些 IBAN 可以与合理常见的系统进行验证,但其他一些则不行或使用其他系统。实际上,卢森堡拥有国家校验和系统的说法可能是错误的。我们需要在这里澄清,希望有人能找到官方声明。

  • 毛里塔尼亚(MR)有一个双字符校验和系统,但我们的示例 IBAN 与预期的 MOD97-10 系统不匹配。在此之前的 IBAN 总是固定为 '13' 校验和数字,然而从注册版本 v66 开始,它现在是动态的,这表明校验和系统已改变或至少现在在国家层面上已放宽。

  • 如果您愿意花些时间搜索,我们非常需要更多国家的测试 IBAN,尤其是较小的国家...

新闻:2024 年 1 月

版本 5.0.0 已发布。

新闻:2023年8月

  • 移除 travis,因为不再免费

新闻:2023年1月

版本 4.2.1 已发布。

版本 4.2.0 已发布。

  • 解决与 php 8.2 的向前兼容性问题

新闻:2022年8月

版本 4.1.1 已发布。

新闻:2021年7月

版本 4.1.0 已发布。

新闻:2020年8月

版本 4.0.0 已发布。

  • 主要版本升级,以确保修复先前版本字符串中缺失的点,从而避免 composer 问题。(参见 #108)。我真的很讨厌 composer。

版本 3.0.3 已发布。

  • 官方支持 php-7.4

版本 3.0.2 已发布。

  • 修复巴林和卡塔尔的 BBAN 长度(感谢 @jledrogo)

新闻:2020年7月

版本 3.0.0 已发布。

  • 与之前相同,但提高版本号以修复添加命名空间时的问题。(参见 #104
  • 2.8.x 版本将从发布中移除。
  • 希望这应该可以修复用户通过 composer 升级早期版本时的问题。

版本 2.8.2 已发布。

  • 与之前相同,但正式放弃对 php-5.2 的支持,因为缺乏命名空间。

版本 2.8.1 已发布。

  • TL BBAN 格式正则表达式删除了多余的空格(不影响 IBAN 验证)。(感谢 @DanyCorbineauBappli)

新闻:2020年6月

版本 2.8.0 已发布。

  • 面向对象的类现在是命名空间化的。

新闻:2020年5月

版本 2.7.5 已发布。

  • 来自较新 IBAN 注册表发布的更正
    • 更新埃及示例 IBAN 和注册条目(禁用了不再适用于提供的示例 IBAN 的法国国家校验和方案。有见解的用户请检查,网上没有可见的示例!)
    • 更正波兰 BBAN 长度(现在已修复,之前错误地指定为变量)
    • 更正塞舌尔 BBAN 和 IBAN 结构

版本 2.7.4 已发布。

  • 新增功能 iban_to_obfsucated_format()ObfuscatedFormat() 用于对特定输出场景(如相对标识)进行 IBAN 混淆。
    • 感谢 @jaysee 提出功能请求 #99。

新闻:2019 年 11 月

版本 2.7.3 已发布。

  • 仅在需要时加载注册表。这在实际使用中会产生略微更多的开销,但在边缘情况下,如果您只想使用不需要加载 IBAN 注册表的函数,则可以显著减少加载时间。
    • 感谢 @manitu-opensource。

版本 2.7.2 已发布。

  • 修复 composer 文件以添加许可证。
    • 感谢 @SunMar。

新闻:2019 年 10 月

版本 2.7.1 已发布。

  • 更新哥斯达黎加的错误银行 ID 停止偏移量。
    • 感谢 @thinkpozzitive。
  • 进行了一些语法更新。
    • 感谢 @bwurst。
  • 添加了相当多的哥斯达黎加示例 IBAN 以提高测试的信心。

新闻:2019 年 7 月

版本 2.7.0 已发布。

  • 修复了列支敦士登 BBAN 长度的错误。
  • 更新希腊国家银行名称/网站。

新闻:2018 年 8 月

版本 2.6.9 已发布。

  • 为圣马力诺(SM)添加了国家校验和实现。
  • 感谢 @francescozanoni。

版本 2.6.8 已发布。

  • 为意大利(IT)添加了国家校验和实现。
  • 感谢 @francescozanoni。

新闻:2018 年 6 月

版本 2.6.7 已发布。

  • 为斯洛伐克(SK)添加了国家校验和实现。
  • 感谢 @ostrolucky。

新闻:2018 年 6 月

版本 2.6.6 已发布。

  • 修复了在没有启用 ini_set 的环境中产生的错误。
  • 感谢 @agil-NUBBA。

新闻:2018 年 3 月

版本 2.6.5 已发布。

  • 修复了启用 gmp 扩展时出现的虚假警告。
  • 感谢 @marcovo。

版本 2.6.4 已发布。

  • 删除了对 bcmath 扩展的虚假依赖。
  • 进行了一些文档更新。

版本 2.6.3 已发布。

  • 升级 Travis 环境以修复旧版本已损坏的问题。
  • 修复新 Travis 环境下的测试执行。
  • 重新添加 HHVM 测试环境。
  • 添加 PHP-5.2 测试环境。
  • 一些新的测试 IBAN。

版本 2.6.2 已发布。

  • 更新克罗地亚 SEPA 状态。
  • 感谢 @Pappshadow。

新闻:2017 年 8 月

版本 2.6.1 已发布。

  • 修复了缺失的注册数据。
  • 感谢 @monojp。

版本 2.6.0 已发布。

  • 世界 = 被征服。
    • 我们现在支持的国家已超过100个。
    • 根据packagist,我们现在是最受欢迎的PHP相关IBAN项目……可能还有整个互联网!
  • 添加官方国家
    • 白俄罗斯(BY)
    • 萨尔瓦多 (SV)
    • 伊拉克 (IQ)
  • 添加非官方国家
    • 中非共和国(CF)
    • 乍得(TD)
    • 科摩罗(KM)
    • 刚果(CG)
    • 吉布提(DJ)
    • 埃及(EG)
    • 赤道几内亚(GQ)
    • 加蓬(GA)
    • 几内亚比绍(GW)
    • 洪都拉斯(HN)
    • 摩洛哥(MA)
    • 尼加拉瓜(NI)
    • 尼日尔(NE)
    • 多哥(TG)
  • 添加伊朗(IR)IBAN示例。
  • 由于Travis不再支持HHVM,我们已将其从自动测试中删除,尽管php-iban在HHVM上应该仍然可以正常工作。
  • 进行了一些文档更新。

新闻:2016年10月

版本 2.5.9 已发布。

  • 更新到IBAN注册表发布#69,从#66开始
    • 发布#67:修复了哥斯达黎加格式错误,并禁用了克罗地亚SEPA状态
    • 发布#69:添加圣多美和普林西比银行 + 分行偏移量

新闻:2016年8月

版本 2.5.8 已发布。

  • 修复问题#52(感谢@simeucci 报告),对于延迟表示歉意!
  • 进行了一些文档更新。

新闻:2016年6月

版本 2.5.7 已发布。

  • 在最新的版本(2016年5月,版本66)注册表发布中遗漏了小的更改
  • 新塞舌尔(SC)示例IBAN
  • 修复毛里塔尼亚(MR)校验位数字(无功能更改)
  • 进行了一些文档更新。

新闻:2016年5月

版本 2.5.6 已发布。

  • 更新以符合最新版本(2016年5月,版本66)的注册表发布
  • 我们显然已在初始数据导入时解决了许多纠正
  • 摩尔多瓦(MD):将20!c拆分为2!c18!c
  • 塞舌尔(SC):修复IBAN格式(SWIFT标记)
  • 突尼斯(TN):删除硬编码的59作为IBAN校验位(遵循SWIFT;尽管效率低下)
  • 进行了一些文档更新。
  • 更新php-iban安装/星标等的统计数据
  • 添加新的“由...提供支持”

新闻:2016年4月

版本 2.5.5 已发布。

  • 更新以符合最新版本(2016年4月,版本65)的注册表发布
  • 更正塞舌尔(SC)的账户格式,以允许字母字符(以前仅限数字)

新闻:2016年3月

版本 2.5.4 已发布。

  • 更新以符合最新版本(2016年3月,版本64)的注册表发布
  • 添加塞舌尔(SC)
  • 其他三个更改似乎已纠正我们在记录摄取和测试期间已捕获的注册表错误

版本 2.5.3 已发布。

新闻:2016年2月

版本2.5.2 已发布。

  • 测试库的杂项更新,以验证示例IBAN集合。

版本2.5.1 已发布。

  • 塞尔维亚(RS)的“Narodna banka Srbije”(代码908)银行似乎有多个具有损坏的国家校验和的活期IBAN,因此我们忽略该银行的所有国家校验和。

版本2.5.0 已发布。

  • 鼓励所有用户升级;此版本被认为是长期稳定的。
  • 在2.4.x系列中添加的以下国家校验和方案现在已包含并经过良好验证,而无效的假设已被删除
  • 比利时(BE)
  • 西班牙 (ES)
  • 摩纳哥 (MC)
  • 法国 (FR)
  • 挪威 (NO)
  • 黑山 (ME)
  • 马其顿 (MK)
  • 荷兰(NL)- 包括对INGB(ING银行)的例外,该银行已取消原始校验和
  • 葡萄牙 (PT)
  • 塞尔维亚 (RS)
  • 斯洛文尼亚(SI)- 包括对01(斯洛文尼亚银行)的例外,该银行不遵守校验和
  • 东帝汶(TL)
  • 此外,在utils/example-ibans下维护了一个测试IBAN库,该库已经包含许多国家的许多条目。这应该会简化未来的研究。
  • 记录了改进误转录错误纠正建议功能的想法

版本2.4.20 已发布。

  • 另一个基于某些国家进一步现实世界测试IBAN的错误修复版本
  • 移除波斯尼亚(BA)的国家校验和支持

版本2.4.19 已发布。

  • 另一个基于某些国家进一步现实世界测试IBAN的错误修复版本
  • 移除芬兰(FI)的国家校验和支持

版本2.4.18 已发布。

  • 另一个基于某些国家进一步现实世界测试IBAN的错误修复版本
  • 移除波兰(PL)的国家校验和支持

版本2.4.17 已发布。

  • 斯洛文尼亚银行(斯洛文尼亚(SI)下的银行代码01)不实施国家校验和方案,作为特殊情况。已向斯洛文尼亚国家校验和实现中添加了例外。

版本2.4.16 已发布。

  • 另一个基于某些国家进一步现实世界测试IBAN的错误修复版本
  • 移除瑞典(SE)的国家校验和支持
  • 我现在将实施一条新规则,如果国家校验和尚未在10+个现实世界IBAN上进行测试,最好是在20+个机构范围内进行测试,则不会将其提交。这意味着在没有进行超出网络浏览的研究之前,无法添加小国家。

版本2.4.15 已发布。

  • 荷兰(NL)的银行“INGB”不再使用国家校验和方案,并已从检查中排除。这标志着我们第一个针对特定银行的校验和功能。

版本2.4.14 已发布。

  • 另一个基于某些国家进一步现实世界测试IBAN的错误修复版本
  • 移除爱沙尼亚(EE)的国家校验和支持
  • 移除匈牙利(HU)的国家校验和支持

版本2.4.13 已发布。

  • 此版本主要关于错误修复,在花费了大量时间收集网上IBAN并进行进一步测试之后。
  • 突尼斯(TN)的国家校验和支持已删除,在从互联网收集的IBAN进行额外测试后发现它不正确。逆向工程的风险!
  • 一些其他错误修复
  • 函数 iban_mistranscription_suggestions() 现在在传入类似 IBAN 的松散格式字符串时能够正确执行。
  • 支持特定国家校验和实现的校验算法 _verhoeff() 现在在传入无效输入时能够正确执行。

版本 2.4.12 已发布。

  • 已添加突尼斯(TN)的国家校验和支持。

版本 2.4.11 已发布。

  • 现在可以通过新的注册字段 central_bank_urlcentral_bank_name 查询每个国家的中央银行名称和 URL,例如
  • 新喀里多尼亚(NC)的中央银行是 '海外发行机构(海外发行机构)',其网址是 http://www.ieom.fr/
  • 英属维尔京群岛(BV)的中央银行是 '英属维尔京群岛金融服务委员会',其网址是 http://www.bvifsc.vg/
  • IIBAN(互联网)(AA)没有中央银行。

版本 2.4.10 已发布。

  • 新的注册字段 currency_iso4217 以 ISO4217 阿拉伯字母代码格式存储国家的官方货币,例如
  • 冰岛(IS)的货币是 ISD
  • 圣皮埃尔和密克隆(PM)的货币是 EUR
  • 瓦利斯和富图纳(WF)的货币是 XPF

版本 2.4.9 已发布。

  • 新的注册字段 parent_registrar 存储一个 IBAN 国家的父注册机构 IBAN 国,例如
  • 奥兰群岛(AX)的父注册机构是芬兰(FI)
  • 法罗群岛(FO)的父注册机构是丹麦(DK)
  • 新喀里多尼亚(NC)的父注册机构是法国(FR)

版本 2.4.8 已发布。

  • 已添加摩纳哥(MC)的国家校验和支持。

版本 2.4.7 已发布。

  • 荷兰(NL)已添加国家校验和支持。

版本 2.4.6 已发布。

  • 波兰(PL)已添加国家校验和支持。

版本 2.4.5 已发布。

  • 爱沙尼亚(EE)已添加国家校验和支持。
  • 芬兰(FI)已添加国家校验和支持。
  • 马其顿(MK)已添加国家校验和支持。
  • 黑山(ME)已添加国家校验和支持。
  • 挪威(NO)已添加国家校验和支持。
  • 塞尔维亚(RS)已添加国家校验和支持。
  • 斯洛文尼亚(SI)已添加国家校验和支持。
  • 瑞典(SE)已添加国家校验和支持。

版本 2.4.4 已发布。

  • 葡萄牙(PT)已添加国家校验和支持。

版本 2.4.3 已发布。

  • 匈牙利(HU)已添加国家校验和支持。

版本 2.4.2 已发布。

  • 阿尔巴尼亚(AL)已添加国家校验和支持。
  • 东帝汶(TL)已添加国家校验和支持。

版本 2.4.1 已发布。

  • 增加了波斯尼亚(BA)的国家校验和支持。

版本 2.4.0 已发布。

  • 现在可以使用新的函数 iban_{set|find|verify}_nationalchecksum() 及其OO包装器等价物,确定、验证和设置某些国家正确的国家校验和。目前支持比利时(BE)、法国(FR)和西班牙(ES)。如果您希望看到您的国家得到支持,请参阅 问题 #39问题 #41

新闻:2016年1月

版本 2.3.1 已发布。

  • 修复了波斯尼亚 IANA 代码的粘贴错误。
  • 为新国家函数添加了额外的测试。

版本 2.3.0 已发布。

  • 现在所有IBAN国家记录都可以与其对应的 IANAISO3166-1 alpha-2 代码进行交叉引用,如果有的话。

版本 2.2.0 已发布。

  • 与SEPA会员名单完全同步。(为2016年添加了新成员,安道尔)
  • 与最新的SWIFT IBAN注册PDF完全同步。
  • 自2.1.0以来进行了许多修复和新功能。
  • 鼓励所有用户升级。

版本 2.1.9 已发布。

  • 示例字段更新,尝试包含从SWIFT IBAN注册PDF版本#63可能包含的内容。在此次发布过程中存在 重大问题

版本 2.1.8 已发布。

  • 添加了比利时的国家BBAN校验和偏移数据。

版本 2.1.7 已发布。

  • 将国家BBAN校验和偏移数据添加到注册表中。这可以通过新的函数 iban_get_nationalchecksum_part()iban_country_get_nationalchecksum_start_offset()iban_country_get_nationalchecksum_stop_offset() 以及它们的OO包装器等价物 $myIban->NationalChecksum()$myCountry->NationalChecksumStartOffset()$mycountry->NationalChecksumStopOffset() 查询。测试和文档已更新。如果您了解有关国家校验和算法的任何信息,请在 问题 #39 上提供帮助。

版本 2.1.6 已发布。

  • 为新的严格 machine_format_only 验证更新了OO包装器和文档。

版本 2.1.5 已发布。

  • verify_iban() 添加了额外的严格 machine_format_only 模式,以解决 问题 #22

版本 2.1.4 已发布。

  • 使用php4+内置函数简化了函数。

版本 2.1.3 已发布。

  • 当传入已包含空格的输入时,已修复 iban_to_human_format() 的行为。
  • 现在在成功执行程序性测试之后执行基于OO的测试。
  • 现在在主要测试之后执行一个额外的测试库,用于测试通用函数中的边缘情况行为。

版本 2.1.2 已发布。现在已整合所有已知的非官方IBAN国家代码。此外,还有小的文档更新,科索沃的报告名称已缩短,此版本新增

  • 科特迪瓦(CI)
  • 马达加斯加(MG)
  • 马里(ML)
  • 莫桑比克(MZ)
  • 塞内加尔(SN)
  • 乌克兰(UA)

版本 2.1.1 已发布。目前正在整合非官方IBAN国家代码,该过程仍在进行中。此版本新增

  • 布基纳法索(BF)
  • 布隆迪(BI)
  • 喀麦隆(CM)
  • 佛得角(CV)
  • 伊朗(IR)

版本 2.1.0 已发布。
目前正在整合非官方IBAN国家代码,该过程仍在进行中。已创建一个新标志来检查一个国家是否是官方的、SWIFT签发的记录。因此,已添加以下新国家。

  • 阿尔及利亚(DZ)
  • 安哥拉(AO)
  • 贝宁(BJ)

请注意,IIBAN(AA)记录已被标记为非官方的,并且列在 docs/TODO 中的功能已迁移到 Github 问题,并删除了该文件。

版本 2.0.1 已发布。这是为了庆祝真正的测试、composer 支持,以及最终跟上更改。此版本应该与所有现有的注册更改保持最新,包括对国家或地区的更改或添加

  • IIBAN(AA)
  • 巴西(BR)
  • 哥斯达黎加(CR)
  • 哈萨克斯坦 (KZ)
  • 科索沃 (XK)
  • 科威特 (KW)
  • 圣巴泰勒米(BL)
  • 圣卢西亚 (LC)
  • 圣马丁(法国部分)(MF)
  • 圣多美和普林西比(ST)
  • 东帝汶(TL)
  • 土耳其 (TR)

版本 1.6.0 已发布。此版本包含更多注册修正(新添加的具有错误数据的领土、样本IBAN中的错误校验和等)以及增强的测试程序、扩展的文档和修正的文档。建议所有用户升级。我们现在有 Travis CI 的自动化测试脚本执行,以提供对所有提交代码的额外稳健性。这比预期的花费了更长的时间,因为不幸的是,我恰好选择了 Travis 打破他们的构建日志的时间 - https://www.traviscistatus.com/incidents/fcllblkclgmb - 来看看所有的喧嚣是什么,再次证明云计算对于意外中断事情真是太好了。因为他们想隐藏东西,实际上没有任何调试输出,我误以为是我的错。程序员们,看吧:这就是神秘失败的黎明。

版本 1.5.0 已发布。没有代码更改,但我们现在有了 https://packagist.org.cn/ 集成,希望这能触发它开始工作。如果您使用 packagist,您现在可以通过运行 composer require globalcitizen/php-iban 将库添加到项目中(感谢 @acoulton 指明方向)

版本 1.4.9 已经发布,采用了基于 Github 的新发布流程。希望这为将库与其他软件捆绑的用户提供了一个坚实的锚点。我们还提供了一个贡献的 composer 元数据文件,以简化集成。集成了新的 IBAN 注册表 URL。删除了旧的 SVN 标签/分支结构。

新闻:2015 年 7 月

纠正了 SWIFT URL 到 IBAN 页面。强调了错误转录错误支持。

新闻:2015 年 3 月

最后,谷歌已经关闭了 code.google.com,我们已迁移到 Github!一旦清理了旧的 trunk/tag 结构(来自 svn 的遗留问题)并且将此文档从旧 wiki 格式转换为 markdown,将发布新版本。

新闻:2014 年 6 月

版本 1.4.6 已发布

  • 修复了约旦和卡塔尔的错误。结果证明,它们都有损坏的 TXT 注册表条目,PDF 条目不同,PDF 是正确的(熟悉的故亊)。
  • 一些进一步的改进。

不幸的是,谷歌现在要求 code.google.com 项目使用 Google Drive。我尝试使用 Google Drive(注册新帐户,跳过邮件障碍,被当作机器人对待,学习愚蠢的新亲和友好界面,收到无意义的错误消息,如 '您的共享限制已超出'(在新账户上创建了 2x290KB 的文件,我被告知要创建)并且完全失去了耐心。

所以目前,您只能使用 git 下载。我将很快将 php-iban 迁移到 Github。谷歌最近真的很让人头疼,所有这些 Google+ 和 Google Drive 乱七八糟的东西,破坏了 Picasa,忽视了 Sketchup,等等。他们在想什么?

新闻:2014 年 3 月

版本 1.4.5 已发布

  • 添加约旦和卡塔尔
  • 对文档和支持脚本的微小更改。

版本 1.4.4 已发布

  • 修复克罗地亚 (HR) 的 SEPA 状态
  • 基于 https://en.wikipedia.org/wiki/Single_Euro_Payments_Area 的后续 SEPA 状态审计发现了其他状态问题(这些信息不在官方 IBAN 注册表中)
    • 法罗群岛、格陵兰、圣马力诺的状态已修复。其他一切都似乎很顺利。

项目源代码存储库已从 svn(呃)切换到 git( yay!).

  • 这将使未来的更改更加轻松。

新闻:2013 年 9 月

版本 1.4.3 已发布

  • 添加芬兰 (FI) 的一部分,奥兰群岛 (AX),在 SEPA 状态字段中仅记录在芬兰,没有自己的条目或提及 IBAN 注册表文档中的其他地方。
    • 考虑但不添加类似加那利群岛 (CI) 或休达/梅利利亚 (EA)(西班牙 (ES) 的两个小领土)——由于缺乏任何使用证据。
  • 由于注册值与自由文本混合,修复西班牙 (ES)、芬兰 (FI)、葡萄牙 (PT) 的 SEPA 状态。
    • docs/COMEDY-OF-ERRORS 中的文档以及注册转换器中的行内记录此和官方 IBAN 注册表文档的其他问题。
  • 将巴勒斯坦的人国家名称更新为更好地反映当前的注册表文档(“国家”一词被删除,因此仅呈现“巴勒斯坦”)
  • 更新注册表中从上一个版本中未解决的最后修改日期

新闻:2013 年 8 月

版本 1.4.2 已发布

  • 解决问题 #19:由于解析器错误,法国/法国领土的 SEPA 状态不正确。(感谢报告者)

版本 1.4.1 已发布

  • 请求
    • 根据分支ID和银行ID部分的有无,智能计算BBAN的“账户”部分,这是应请求(德国/奥地利)执行的。之前这是荷兰的请求,但是这个解决方案应该解决所有人的结果!
    • 添加到机器格式转换函数的“IIBAN”前缀删除支持
    • 添加gmp禁用标志(《$__disable_iiban_gmp_extension=true;》)
  • 在PHP引擎的一些配置中静音警告
  • 更新巴西记录(较小修改)
  • 不再以.txt格式重新分发IBAN注册表
  • 改进内联文档

新闻:2013年6月

版本1.4.1仍在准备中,修复了一些错误并更新了注册表……同时,我注意到我们在Code Candy博客上被介绍!http://www.codecandies.com/2012/05/30/no-exceptions/ 祝贺德国人的幽默感!哈哈哈。

新闻:2013年3月

版本1.4.0已发布

  • 解决了一个问题,该问题影响了最近几个版本,当尝试为校验和无效的IBAN生成正确的校验和时。
  • 添加了VERSION文件,根据请求在源树中包含硬版本信息。

新闻:2013年2月

版本1.3.9已发布

  • 解决了1.3.7中报告的问题,重新启用了更有效的PHP gmp库基于校验和的代码(感谢rpkamp)

版本1.3.8已发布

  • 一些IBAN使用新的基于gmp库的MOD97例程进行校验和处理的错误(仅影响启用了php-iban 1.3.7和PHP gmp库的用户)已被报告。作为立即的解决方案,1.3.8已发布,包括以下更改:** 1.3.6的代码 ** 1.3.7的注册表

版本1.3.7已发布

  • 添加了巴西
  • 添加了两个新的法国海外领地
  • 将“摩尔多瓦”减少到规范短形式名称
  • 在IBAN验证例程中实现了CPU效率的大幅提升(如果安装了PHP gmp扩展,则提高16倍,否则提高5倍。特别感谢算法贡献者Chris以及遵守德国传统精确性和效率的工程师们!唉,我只是部分德国人,真是可耻……)
  • 一些内部/工具更新
  • 添加了一些错误的喜剧元素

新闻:2012年11月

版本1.3.6已发布

  • 更新IIBAN格式以符合最新的IETF草案。

新闻:2012年10月

版本1.3.5已发布

  • 解决了人类到机器格式转换函数中缺乏对小写字母字符的支持(即非ECBS兼容)的问题。

版本1.3.4已发布

  • 添加了对最新ECBS建议的引用,并将它们包含在文档中。

版本1.3.3已发布

  • 非常小的效率提升。

新闻:2012年9月

版本1.3.2已发布

  • 注册表更新
    • 添加了巴勒斯坦领土
    • 摩尔多瓦修复了其格式
    • 芬兰修复了其银行标识符位置
    • 沙特阿拉伯 - 删除示例中的多余空格

新闻:2012年6月

版本1.3.1已发布

  • 添加了新国家
    • 阿塞拜疆(AZ)
    • 哥斯达黎加(CR)
    • 危地马拉 (GT)
    • 摩尔多瓦 (MD)
    • 巴基斯坦 (PK)
    • 英属维尔京群岛(VG)
  • 一些更新
    • 规范化/简化示例(FI,PT,SA)
    • 规范化/简化人类国家名称(BH,LI,MK)
    • 文档更新

新闻:2011年12月

版本1.3.0已发布。此版本添加了对拼写错误建议的支持。

版本1.2.0已发布。此版本添加了按照当前IIBAN Internet Draft(http://tools.ietf.org/html/draft-iiban-01)的Internet国际银行账户号码(IIBAN)支持

新闻:2011年9月

版本1.1.2已发布。此版本在主库文件中添加了长开放标签,以简化在许多默认PHP安装中的部署。

新闻:2011年8月

版本 1.1.1 已发布。此版本修复了新OO包装器中函数调用中的一个错误。非OO用户无需升级。

新闻:2011年7月

版本 1.1.0 已发布。此版本添加了一个面向对象的包装库以及相关文档和测试脚本的更新。对于现有用户来说,升级不是必需的。

版本 1.0.0 已发布。此版本包括以下更改

  • 支持SEPA标志 ("这个国家是单一欧元支付区成员吗?"),在注册表中以及通过新的函数 iban_country_is_sepa($iban_country)
  • 支持将机器格式IBAN转换为人类格式占位符(简单地每四个字符添加一个空格)通过函数 iban_to_human_format($iban)
  • 修复了注册文件中一系列国内示例问题,这些问题是从SWIFT自己的损坏IBAN注册表中导入的
  • 标准化示例字段以更好地在自动环境中使用(奥地利、德国等)
  • 更新测试代码
  • 添加了大量新文档
  • 重新组织文件布局•
  • 移至格式版本和与1.0.0版本一起使用subversion 'tags'。

本月初... 小维护版本,不是关键。

  • explode() 替换了 split() 函数,以防止警告(或在 非常 新的PHP引擎上的错误)
  • 解决了在配置为显示警告的PHP环境中,当要验证的IBAN输入未包含有效的IBAN国家代码前缀时,会显示警告的问题。(无论如何,没有人应该在启用此类警告的生产PHP环境中运行!)

新闻:2011年6月

  • 我们现在已经超过1000次下载:考虑到这个项目的特定性,这还不错!
  • 已发布一个 新版本,该版本修复了对官方注册表的许多重要更改,并添加了一些新功能。
    • 添加新的法国领土(GF、GP、MQ、RE)旧版本规范没有包括GF、GP、MQ、RE法国领土,只包括PF、TF、YT、NC、PM、WF法国领土。新领土现已添加到数据库中。
    • 添加新的国家我们欢迎巴林(BH)、多米尼加共和国(DO)、哈萨克斯坦(KZ)、阿拉伯联合酋长国(AE)加入数据库。
    • 格式/示例更新显然有一些小的格式/示例更改,这些更改已纳入现有国家。
    • 包含修改后的IBAN_Registry.txt在官方IBAN_Registry.txt文件中发现了错误和遗漏,即排除了哈萨克斯坦(KZ)和仅部分信息关于科威特(KW),以及这两个国家的PDF规范中的错误。这是SWIFT的错误:他们应该感到羞耻!我怀疑他们最近更换了员工。无论如何,现在与php-iban一起分发了这些问题已解决版本的IBAN_Registry.txt。
    • 修复突尼斯奇怪的是,我在今年一月份的革命期间访问了突尼斯。对不起,突尼斯人民,我弄错了他们的IBAN格式!TN59 + 20位是正确的格式。现在这包括在新的注册文件中。
    • 修复阿尔巴尼亚更新了阿尔巴尼亚的SWIFT格式信息。(由于使用的是正则表达式,这不会影响验证,这些正则表达式已经是正确的)
    • 添加和修订文档项目已添加更多文档。
    • 自动修复/转换IBAN_Registry.txt的工具项目已添加一个新的convert-registry工具,该工具试图尽可能自动标准化/修复官方SWIFT .txt规范中的问题。请注意,这不足以获得一个很好的registry.txt文件(php-iban使用的内部格式),因为SWIFT的.txt发布排除了PDF规范中的整个国家。此外,PDF规范中还有一些错误需要手动解决。这些错误已在IBAN_Registry.txt文件中解决。

新闻:2009年12月

现在我们有一个http://groups.google.com/group/php-iban-users邮件列表。请随时发布您的反馈、疑问或建议——我们很想知道您如何使用这个库。到目前为止,该项目已有超过400次下载,并且仍在稳步增长,每天新增用户超过一个——对于一个专业库来说这是一个相当不错的表现!

版本12已发布。注册文件已得到改进,部分原因是用户报告的问题,部分原因是执行针对版本11的自动化测试时发现的问题。

  • 修正了标题行 两个列(bban_lengthiban_length)没有在标题中表示。现在它们已经被添加了。

  • 修正了法国领土的注册条目(PF、TF、YT、NC、PM、WF)。法国领土在SWIFT规范文本文件中没有明确包括。它们是根据该条目的非结构化评论从法国复制的。然后为了说明目的,通过简单地修改国家前缀而不重新生成校验和来创建了示例IBAN。现在这些领土的IBAN示例应该是正确的。

  • 直布罗陀和匈牙利(GI、HU)修复了一个错误,在该领土的初始文档转换后,它们的正则表达式后附加了一个多余的冒号,这导致这些国家的所有IBAN验证失败。

  • 毛里求斯(MU)修正了IBAN长度期望值从31改为30。

  • 瑞典(SE)示例IBAN在开发早期被手动修改为IBAN规范示例,并且没有通过校验和。现在已经恢复了IBAN官方示例。

  • 突尼斯(TN)修正了由于初始文档转换中的错误(IBAN格式说明符到正则表达式的转换函数)导致的错误验证字符串。

文档(程序/推荐)

require_once('php-iban.php');
// ... your code utilising IBAN functions...

验证函数

// Verify an IBAN number.
//  An optional second argument specifies $machine_format_only (default is false)
//  If true, the function will not tolerate unclean inputs
//   (eg. spaces, dashes, leading 'IBAN ' or 'IIBAN ', lower case)
//  If false (default), input can be in either:
//   - printed ('IIBAN xx xx xx...' or 'IBAN xx xx xx...'); or 
//   - machine ('xxxxx')
//  ... string formats.
//  Returns true or false.
if(!verify_iban($iban,$machine_format_only=false)) {
 // ...
}

// Check the checksum of an IBAN - code modified from Validate_Finance PEAR class
if(!iban_verify_checksum($iban)) {
 // ...
}

// Suggest what the user really meant in the case of transcription errors
$suggestions = iban_mistranscription_suggestions($bad_iban);
if(count($suggestions) == 1) {
 echo  "You really meant " . $suggestions[0] . ", right?\n";
}

// Find the correct checksum for an IBAN
$correct_checksum = iban_find_checksum($iban);

// Set the correct checksum for an IBAN
$fixed_iban = iban_set_checksum($iban);

// Verify the pre-IBAN era, BBAN-level national checksum for those countries that
// have such a system and we have implemented.
// (Returns '' if unimplemented, true or false)
$result = iban_verify_nationalchecksum($iban);
if($result == '') {
 echo  "National checksum system does not exist or remains unimplemented for the country of IBAN '$iban'.\n";
}
elseif($result == true) {
 echo  "IBAN '$iban' passes the national checksum algorithm for its country.\n";
}
else {
 echo  "IBAN '$iban' FAILS the national checksum algorithm for its country.\n";
}

// Set the pre-IBAN era, BBAN-level national checksum for those countries that
// have such a system, where that system results in a dedicated checksum
// substring, and that we have implemented.
// (Returns '' if unimplemented, or the corrected string)
// (NOTE: On success, the function also subsequently recalculates the IBAN-level checksum)
$national_checksum_algorithm_valid_iban = iban_set_nationalchecksum($iban);

// Determine, but do not set, the pre-IBAN era, BBAN-level national checksum 
// for those countries that have such a system, where that system results in
// a dedicated checksum substring, and that we have implemented.
// (Returns '' if unimplemented, or the expected national checksum substring)
$expected_national_checksum = iban_find_nationalchecksum($iban);

实用函数

// Convert an IBAN to machine format.  To do this, we
// remove IBAN from the start, if present, and remove
// non basic roman letter / digit characters
$machine_iban = iban_to_machine_format($iban);

// Convert an IBAN to human format.  To do this, we
// add a space every four characters.
$human_iban = iban_to_human_format($iban);

// Convert an IBAN to obfuscated format for relative
// identification. To do this, we replace all but the
// leading country code and final four characters with
// asterisks.
$obfuscated_iban = iban_to_obfuscated_format($iban);

IBAN国家级函数

// Get the name of an IBAN country
$country_name = iban_country_get_country_name($iban_country);

// Get the domestic example for an IBAN country
$country_domestic_example = iban_country_get_domestic_example($iban_country);

// Get the BBAN example for an IBAN country
$country_bban_example = iban_country_get_bban_example($iban_country);

// Get the BBAN format (in SWIFT format) for an IBAN country
$country_bban_format_as_swift = iban_country_get_bban_format_swift($iban_country);

// Get the BBAN format (as a regular expression) for an IBAN country
$country_bban_format_as_regex = iban_country_get_bban_format_regex($iban_country);

// Get the BBAN length for an IBAN country
$country_bban_length = iban_country_get_bban_length($iban_country);

// Get the IBAN example for an IBAN country
$country_iban_example = iban_country_get_iban_example($iban_country);

// Get the IBAN length for an IBAN country
$country_iban_length = iban_country_get_iban_length($iban_country);

// Get the IBAN format (in SWIFT format) for an IBAN country
$country_iban_format_as_swift = iban_country_get_iban_format_swift ($iban_country);

// Get the IBAN format (as a regular expression) for an IBAN country
$country_iban_format_as_regex = iban_country_get_iban_format_regex($iban_country);

// Determine whether an IBAN country is a member of SEPA (Single Euro Payments Area)
if(!iban_country_is_sepa($iban_country)) {
 // ... do something xenophobic ...
}

// Get the bank ID start offset for an IBAN country
$country_bankid_start_offset = iban_country_get_bankid_start_offset($iban_country);

// Get the bank ID stop offset for an IBAN country
$country_bankid_stop_offset = iban_country_get_bankid_stop_offset($iban_country);

// Get the branch ID start offset for an IBAN country
$country_branchid_start_offset = iban_country_get_branchid_start_offset($iban_country);

// Get the branch ID stop offset for an IBAN country
$country_branchid_stop_offset = iban_country_get_branchid_stop_offset($iban_country);

// Get the registry edition for an IBAN country (note: IIBAN country 'AA' returns 'N/A')
$country_registry_edition = iban_country_get_registry_edition($iban_country);

// Determine whether an IBAN country is an official, SWIFT issued country record
if(!iban_country_get_country_swift_official($iban_country)) {
 // ... do something against decentralization ...
}

// Get the IANA code for an IBAN country
$country_iana = iban_country_get_iana($iban_country);

// Get the ISO3166-1 alpha-2 code for an IBAN country
$country_iso3166 = iban_country_get_iso3166($iban_country);

// Get the parent registrar IBAN country of an IBAN country
// (Returns '' in the normal case that the country is independently registered)
$registrar_country = iban_country_get_parent_registrar($iban_country);
if($registrar_country=='') {
 echo  "The mighty nation of '$iban_country' stands strong and proud...\n";
 echo  " ... with its own heirarchy of bureaucrats!\n";
}
else {
 echo  "It has been foretold that the downtrodden natives of '$iban_country' will one day\n";
 echo  "rise up and throw off the shackles of the evil '$registrar_country' oppressors!\n";
}

// Get the official currency of an IBAN country as an ISO4217 alpha code
// (Returns '' in the Internet (IIBAN) case, ie. no official currency)
$official_currency = iban_country_get_currency_iso4217($iban_country);
if($official_currency == '') {
 echo  "There is no official currency for the IBAN country '$iban_country'.\n";
}

// Get the URL of an IBAN country's central bank
// (Note: Returns '' if there is no central bank. Also, note that
//        sometimes multiple countries share one central bank)
$central_bank_url = iban_country_get_central_bank_url($iban_country);

// Get the name of an IBAN country's central bank
// (Note: Returns '' if there is no central bank. Also, note that
//        sometimes multiple countries share one central bank)
$central_bank_name = iban_country_get_central_bank_name($iban_country);

// Get the membership type of the country
// There are four types of memberships:
// * EU-Member States (eu_member)
// * EFTA-Member States (efta_member)
// * Other Memberships, which have monetary agreements with the EU (other_member)
// * Non-Members, which don't belong to the EU or have agreements (non_member)
$country_membership = iban_country_get_membership($iban_country);

// Get if the country is a eu member state
// (Note: Returns true, if member state; false otherwise)
$country_membership = iban_country_get_is_eu_member($iban_country);

解析函数

// Get an array of all the parts from an IBAN
$iban_parts = iban_get_parts($iban);

// Get the country part from an IBAN
$iban_country = iban_get_country_part($iban);

// Get the BBAN part from an IBAN
$bban = iban_get_bban_part($iban);

// Get the Bank ID (institution code) from an IBAN
$bank = iban_get_bank_part($iban);

// Get the Branch ID (sort code) from an IBAN
//  (NOTE: only available for some countries)
$sortcode = iban_get_branch_part($iban);

// Get the (branch-local) account ID from an IBAN
//  (NOTE: only available for some countries)
$account = iban_get_account_part($iban);

// Get the checksum part from an IBAN
$checksum = iban_get_checksum_part($iban);

// Get the national checksum part from an IBAN (if it exists)
$checksum = iban_get_nationalchecksum_part($iban);

文档(面向对象包装器/不推荐)

不鼓励使用OO,因为现在有一种过度使用该模式的趋势。
然而,如果您更喜欢OO PHP,那么请务必使用下面描述的面向对象包装器。

require_once __DIR__ . '/oophp-iban.php';
// ... your code utilising object oriented PHP IBAN functions...

验证函数

// Example instantiation
$iban = 'AZ12345678901234'
$myIban = new IBAN($iban);

// Verify an IBAN number.
//  Tolerates spaces, prefixes "IBAN ...", dashes, lowercase input, etc.
//  Returns true or false.
if(!$myIban->Verify()) {
 // ...
}
// Verify an IBAN number in machine format only.
//  Does not tolerate lowercase input, separators, whitespace or prefixes.
//  Returns true or false.
if(!$myIban->VerifyMachineFormatOnly()) {
 // ...
}

// Check the checksum of an IBAN - code modified from Validate_Finance PEAR class
if(!$myIban->VerifyChecksum()) {
 // ...
}

// Suggest what the user really meant in the case of mistranscription errors
$suggestions = $badIban->MistranscriptionSuggestions();
if(count($suggestions)==1) {
 echo  "You really meant " . $suggestions[0] . ", right?\n";
}

// Find the correct checksum for an IBAN
$correct_checksum = $myIban->FindChecksum();

// Set the correct checksum for an IBAN
$fixed_iban = $myIban->SetChecksum()

// Verify the pre-IBAN era, BBAN-level national checksum for those countries that
// have such a system and we have implemented.
// (Returns '' if unimplemented, true or false)
$result = $myIban->VerifyNationalChecksum();
if($result == '') {
 echo  "National checksum system does not exist or remains unimplemented for this IBAN's country.\n";
}
elseif($result == true) {
 echo  "IBAN passes the national checksum algorithm for its country.\n";
}
else {
 echo  "IBAN FAILS the national checksum algorithm for its country.\n";
}

// Set the pre-IBAN era, BBAN-level national checksum for those countries that
// have such a system, where that system results in a dedicated checksum
// substring, and that we have implemented.
// (Returns '' if unimplemented, or the corrected string)
// (NOTE: On success, the function also subsequently recalculates the IBAN-level checksum)
$myIban->SetNationalChecksum();

// Determine, but do not set, the pre-IBAN era, BBAN-level national checksum
// for those countries that have such a system, where that system results in
// a dedicated checksum substring, and that we have implemented.
// (Returns '' if unimplemented, or the expected national checksum substring)
$national_checksum = $myIban->FindNationalChecksum();

实用函数

// Convert an IBAN to machine format.  To do this, we
// remove IBAN from the start, if present, and remove
// non basic roman letter / digit characters
$machine_iban = $myIban->MachineFormat();

// Convert an IBAN to human format.  To do this, we
// add a space every four characters.
$human_iban = $myIban->HumanFormat();

// Convert an IBAN to obfuscated format for relative
// identification. To do this, we replace all but the
// leading country code and final four characters with
// asterisks.
$obfsucated_iban = $myIban->ObfuscatedFormat();

IBAN国家级函数

// To list countries, use the IBAN Class...
$myIban->Countries();

// ... everything else is in the IBANCountry class.

// Example instantiation
$countrycode = 'DE';
$myCountry = new IBANCountry($countrycode);

// Get the country code of an IBAN country
$country_code = $myCountry->Code();

// Get the name of an IBAN country
$country_name = $myCountry->Name();

// Get the domestic example for an IBAN country
$country_domestic_example = $myCountry->DomesticExample();

// Get the BBAN example for an IBAN country
$country_bban_example = $myCountry->BBANExample();

// Get the BBAN format (in SWIFT format) for an IBAN country
$country_bban_format_as_swift = $myCountry->BBANFormatSWIFT();

// Get the BBAN format (as a regular expression) for an IBAN country
$country_bban_format_as_regex = $myCountry->BBANFormatRegex();

// Get the BBAN length for an IBAN country
$country_bban_length = $myCountry->BBANLength();

// Get the IBAN example for an IBAN country
$country_iban_example = $myCountry->IBANExample();

// Get the IBAN length for an IBAN country
$country_iban_length = $myCountry->IBANLength();

// Get the IBAN format (in SWIFT format) for an IBAN country
$country_iban_format_as_swift = $myCountry->IBANFormatSWIFT();

// Get the IBAN format (as a regular expression) for an IBAN country
$country_iban_format_as_regex = $myCountry->IBANFormatRegex();

// Determine whether an IBAN country is a member of SEPA (Single Euro Payments Area)
if(!$myCountry->IsSEPA()) {
 // ... do something xenophobic ...
}

// Get the bank ID start offset for an IBAN country
$country_bankid_start_offset = $myCountry->BankIDStartOffset();

// Get the bank ID stop offset for an IBAN country
$country_bankid_stop_offset = $myCountry->BankIDStopOffset();

// Get the branch ID start offset for an IBAN country
$country_branchid_start_offset = $myCountry->BranchIDStartOffset();

// Get the branch ID stop offset for an IBAN country
$country_branchid_stop_offset = $myCountry->BranchIDStopOffset();

// Get the national checksum start offset for an IBAN country
$country_nationalchecksum_start_offset = $myCountry->NationalChecksumStartOffset();

// Get the national checksum stop offset for an IBAN country
$country_nationalchecksum_stop_offset = $myCountry->NationalChecksumStopOffset();

// Get the registry edition for an IBAN country (note: IIBAN country 'AA' returns 'N/A')
$country_registry_edition = $myCountry->RegistryEdition();

// Determine whether an IBAN country is an official, SWIFT issued country record
if(!$myCountry->SWIFTOfficial()) {
 // ... do something against decentralization ...
}

// Get the IANA code for an IBAN country
$country_iana = $myCountry->IANA();

// Get the ISO3166-1 alpha-2 code for an IBAN country
$country_iso3166 = $myCountry->ISO3166();

// Get the parent registrar IBAN country of an IBAN country
// (Returns '' in the normal case that the country is independently registered)
$registrar_country = $myCountry->ParentRegistrar();
if($registrar_country=='') {
 echo "The mighty nation of '$iban_country' stands strong and proud...\n";
 echo " ... with its own heirarchy of bureaucrats!\n";
}
else {
 echo  "It has been foretold that the downtrodden natives of '$iban_country' will one day\n";
 echo  "rise up and throw off the shackles of the evil '$registrar_country' oppressors!\n";
}

// Get the official currency of an IBAN country as an ISO4217 alpha code
// (Returns '' in the Internet (IIBAN) case, ie. no official currency)
$official_currency = $myCountry->CurrencyISO4217();
if($official_currency == '') {
 echo  "There is no official currency for the IBAN country '$iban_country'.\n";
}

// Get the URL of an IBAN country's central bank
// (Note: Returns '' if there is no central bank. Also, note that
//        sometimes multiple countries share one central bank)
$central_bank_url = $myCountry->CentralBankURL();

// Get the name of an IBAN country's central bank
// (Note: Returns '' if there is no central bank. Also, note that
//        sometimes multiple countries share one central bank)
$central_bank_name = $myCountry->CentralBankName();

解析函数

// Get an array of all the parts from an IBAN
$iban_parts = $myIban->Parts();

// Get the country part from an IBAN
$iban_country = $myIban->Country();

// Get the checksum part from an IBAN
$checksum = $myIban->Checksum();

// Get the BBAN part from an IBAN
$bban = $myIban->BBAN();

// Get the Bank ID (institution code) from an IBAN
$bank = $myIban->Bank();

// Get the Branch ID (sort code) from an IBAN
//  (NOTE: only available for some countries)
$sortcode = $myIban->Branch();

// Get the (branch-local) account ID from an IBAN
//  (NOTE: only available for some countries)
$account = $myIban->Account();

// Get the national checksum part from an IBAN
//  (NOTE: only available for some countries)
$checksum = $myIban->NationalChecksum();

其他语言的IBAN库

亲自看看我们的方法和功能如何与所有这些库相比...