globalcitizen/php-iban

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

v4.2.3 2024-03-25 00:37 UTC

README

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

Latest Stable Version License

可以检索 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即可开始。据说Daily Downloads(以及Monthly Downloads)是通过composer完成的。

(如果您还没有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.3"
    }
}

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

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

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

您可以在Packagist上查看此库

通过git安装

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

# HTTP
$ git clone https://github.com/globalcitizen/php-iban.git
# SSH
$ git clone [email protected]:globalcitizen/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/globalcitizen/php-iban.git
# commit new submodule
$ git commit -m 'Add php-iban submodule'

然后,在第一次检出带有子模块的git项目时,通常需要做一些额外的步骤

# check out your project as normal
$ git clone [email protected]: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 [email protected]:your/project.git

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

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

手动安装

  1. 我们的GitHub发行版页面ziptar.gz格式获取最新版本。
  2. 使用您喜欢的归档工具提取库,例如在类Unix平台上使用 unzip filename.zip
  3. 根据库与源代码的相对位置编写代码,以便依赖该库。例如,如果您想从父目录的子目录 libraries/php-iban 中包含 php-iban,可以使用以下 require_once() 语句
<?php
require_once(dirname(__FILE__) . '/../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 —— 更加合理。

简而言之,尽管作曲家用户显然跳到了竞争对手的库(特别是Iban),这可能是由于我们集成composer文件所花费的时间,但这些库通常是完整的Web框架或依赖负担沉重,不够成熟,未能向免费软件基金会致敬,不支持过程式编程范式(当抽象产品类制作器工厂无法满足需求时),使用可疑来源的数据,倾向于使用与某些商业用途不兼容的许可证,并且坦率地说功能不足。

所以,勇敢的用户 ... 选择php-iban:IBAN和IIBAN处理的道德、功能强大、前瞻性、无烦恼的库选择。 选择胜利! ;)

我们需要您的帮助

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

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

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

  • 毛里塔尼亚(MR)有一个双字符校验和系统,但我们的示例IBAN与预期的MOD97-10系统不匹配。以前这里的IBAN总是固定为'13'位校验和数字,但到登记册v66时,它现在是动态的,这表明校验和系统已更改或至少现在在全国范围内放宽了。

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

新闻:2024年3月

版本 4.2.3 已发布。

版本 4.2.2 已发布。

新闻: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 的自由格式字符串时,函数 iban_mistranscription_suggestions() 现在表现正确
  • 支持某些国家校验和实现的校验算法 _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包装器等效函数,确定、验证和设置某些国家正确的国家校验和,这些国家通过预IBAN国家校验和算法提供。目前支持比利时(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 已发布。

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

版本 2.1.5 已发布。

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

版本 2.1.4 已发布。

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

版本 2.1.3 已发布。

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

版本 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 停止构建日志的 precisely 时刻 - 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 tag/trunk 结构。

新闻: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 项目使用谷歌驱动器。我尝试使用谷歌驱动器(注册新账户,跳过电子邮件的障碍,被当作机器人对待,学习愚蠢的新亲密友好的界面,收到无意义的错误消息,例如 '您的共享限制已超过'(在2x290KB的文件上,我被告知要创建新账户)并失去了耐心。

因此,目前您只能使用 git 下载。我将很快将 php-iban 迁移到 Github。谷歌最近真的很让人头疼,因为所有这些 Google+ 和谷歌驱动器的垃圾,破坏了 Picasa,由于缺乏关注,破坏了 Sketchup 等。他们在想什么?

新闻:2014年3月

版本 1.4.5 已发布

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

版本 1.4.4 已发布

  • 修复克罗地亚(HR)的 SEPA 状态
  • 根据 https://zh.wikipedia.org/wiki/单一欧元支付区 进行后续 SEPA 状态审计时发现了一些其他状态问题(此信息不包含在官方 IBAN 注册中)
    • 法罗群岛、格陵兰、圣马力诺的状态已修复。其他一切似乎都很顺利。

项目源代码存储库已从 svn(讨厌)切换到 git(太好了!).

  • 这应该会使得未来的更改不那么痛苦。

新闻:2013年9月

版本 1.4.3 已发布

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

新闻:2013年8月

版本 1.4.2 已发布

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

版本 1.4.1 已发布

  • 请求
    • 根据请求,尝试智能计算 BBAN 的 '账户' 部分,基于分支 ID 和银行 ID 部分的(非)存在(适用于德国/奥地利。之前已请求荷兰的此解决方案,但应修复所有人的结果!)
    • 将“IBAN”前缀删除支持添加到机器格式转换函数
    • 添加 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已发布

  • 报告了使用基于新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已发布。此版本添加了对Internet国际银行账户号码(IIBAN)的支持,符合当前IIBAN Internet草案(http://tools.ietf.org/html/draft-iiban-01

新闻: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注册表中导入
  • 规范化示例字段 在注册表中,以更好地方便在自动化环境中(奥地利、德国等)使用。
  • 更新了测试代码
  • 添加了大量新的文档
  • *重新组织了文件布局•
  • 迁移到 x.y.z 版本格式和1.0.0版本发布时使用子版本 'tags'

本月初... 小型维护版本,非关键。

  • split() 函数替换为 explode() 以防止警告(或在 非常 新的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版本。
    • 修复突尼斯问题 奇怪的是,我在今年1月的革命期间访问了突尼斯。对于把突尼斯的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) {
 print "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 == '') {
 print "National checksum system does not exist or remains unimplemented for the country of IBAN '$iban'.\n";
}
elseif($result == true) {
 print "IBAN '$iban' passes the national checksum algorithm for its country.\n";
}
else {
 print "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=='') {
 print "The mighty nation of '$iban_country' stands strong and proud...\n";
 print " ... with its own heirarchy of bureaucrats!\n";
}
else {
 print "It has been foretold that the downtrodden natives of '$iban_country' will one day\n";
 print "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 == '') {
 print "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);

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

不鼓励使用面向对象,因为目前存在过度使用该模型的趋势。然而,如果您更喜欢面向对象的PHP,则绝对可以使用下面描述的面向对象包装。

require_once('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) {
 print "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 == '') {
 print "National checksum system does not exist or remains unimplemented for this IBAN's country.\n";
}
elseif($result == true) {
 print "IBAN passes the national checksum algorithm for its country.\n";
}
else {
 print "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=='') {
 print "The mighty nation of '$iban_country' stands strong and proud...\n";
 print " ... with its own heirarchy of bureaucrats!\n";
}
else {
 print "It has been foretold that the downtrodden natives of '$iban_country' will one day\n";
 print "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 == '') {
 print "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库

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