php-iban
— это библиотека для анализа, проверки и генерации информации о банковском счете IBAN (и IIBAN) на PHP.
Можно получить все части IBAN, включая код страны, контрольную сумму, BBAN, код финансового учреждения или банка, номер счета, а при использовании национальной системы фиксированной длины также код филиала/сортировки. Устаревшие национальные контрольные суммы также могут быть получены, проверены и правильно установлены, если они доступны, независимо от того, относятся ли они к части номера счета, идентификаторам банка и филиала, части или всему вышеперечисленному. Коды стран IBAN можно конвертировать в форматы ISO3166-1 альфа-2 и IANA, можно запросить родительскую страну IBAN, выступающую в качестве регистратора для зависимых территорий, официальную национальную валюту (формат альфа-кода ISO4217), название центрального банка и URL-адрес центрального банка. также может быть запрошен для облегчения интеграции. IBAN могут быть преобразованы между человеческим и машинным представлением. IBAN могут быть запутаны для представления людям в особых обстоятельствах, таких как относительная идентификация. Включена база данных примеров/тестовых номеров IBAN из разных стран. Наконец, если обнаружен неправильный номер IBAN, вызванный ошибкой неправильной транскрипции, можно сделать очень точные предложения для первоначально запланированного ввода.
Анализатор был создан с использованием регулярных выражений для адаптации содержимого официального реестра IBAN, доступного в SWIFT, а затем вручную измененного для особых случаев, таких как ошибки и упущения в официальных спецификациях SWIFT.
Различные недостатки первоначальной адаптации с тех пор были исправлены, и текущая версия должна представлять собой достаточно правильную и надежную реализацию.
При необходимости также были включены рекомендации Европейского комитета по банковским стандартам (ECBS).
Имейте в виду, что, поскольку спецификация часто меняется, она может быть не на 100% актуальной, если недавно была выпущена новая версия - хотя я стараюсь изо всех сил. В настоящее время считается, что мы в курсе релиза от января 2020 года, т.е. PDF-выпуск №86.
Лицензия LGPL позволяет его бесплатно использовать в коммерческих целях.
Поддерживаются следующие 116 официальных и неофициальных стран IBAN.
Если вы используете композитор, вы можете просто запустить composer require globalcitizen/php-iban
чтобы начать работу. Сообщается (и) были сделаны через композитор.
(Если у вас еще нет composer
и вы хотите установить его небезопасным способом (не рекомендуется, но удобно), вы можете запустить curl -sS https://getcomposer.org/installer | php
или wget -O- https://getcomposer.org/installer | php
)
Затем просто добавьте следующее в файл composer.json
:
// composer.json
{
"require" : {
"globalcitizen/php-iban" : "4.2.3"
}
}
Затем вы можете установить новые зависимости, запустив команду обновления composer
из каталога, где находится ваш файл composer.json
:
# 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 clone
:
# HTTP
$ git clone https://github.com/globalcitizen/php-iban.git
# SSH
$ git clone [email protected]:globalcitizen/php-iban.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 '
zip
или tar.gz
unzip filename.zip
на Unix-подобных платформах.php-iban
из подкаталога libraries/php-iban
родительского каталога, вы можете использовать следующий оператор require_once(): <?php
require_once ( dirname ( __FILE__ ) . ' /../libraries/php-iban/php-iban.php ' );
# ... your code utilizing php-iban
?>
В следующей таблице php-iban сравнивается с другими проектами PHP, предлагающими функциональные возможности, связанные с IBAN, на основе общей информации о проекте и поддерживаемых парадигм программирования.
Проект | Лиц. | Процесс | оо | Началось | Последний | Звезда | Смотреть | Вилка | Устанавливает | Домашняя культура | Депс |
---|---|---|---|---|---|---|---|---|---|---|---|
php-iban | LGPL | ✔ | ✔ | 2009 год | 4.2.3 | 426 | 29 | 104 | ~7M+* | Глобальный* | никто |
Ибан | Массачусетский технологический институт | ✘ | ✔ | 2013 год | 1.3.0 | 50 | 9 | 19 | 178,39 тыс. | немецкий | много |
Изокоды | GPL3 | ✘ | ✔ | 2012 год | 2.1.1 | 466 | 22 | 54 | 145 тыс. | Французский | много |
SepaUtil's | GPL3 | ✘ | ✔ | 2014 год | 1.2.3 | 8 | 4 | 3 | 25 тыс. | немецкий | phpunit |
Симфония | Массачусетский технологический институт | ✘ | ✔ | 2013 год | 3.3.6 | 15 тысяч | 1214 | 5,6 тыс. | 23M+ | Французский | много |
Примечания:
Теперь давайте посмотрим на особенности.
+ | ИСО | ЯНА | СЕПА | ₶ | УО | МТ | Северная Каролина | ₴ | КБ | ЧАС? | Реестр | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
php-iban | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 116: полный CSV с исправленными ошибками, набор инструментов и документация с открытым исходным кодом. |
Ибан | ✔* | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | 54: частичный, жестко запрограммированный, сомнительного происхождения. |
Изокоды | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | 66: частичный, жестко запрограммированный, сомнительного происхождения. |
SepaUtil's | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | 89: частичный, жестко запрограммированный, сомнительного происхождения. |
Симфония | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | 95: частичный, жестко запрограммированный, сомнительного происхождения. |
Примечание:
IBAN XXXX XXXX XXXX XXXX
вместо XXXXXXXXXXXXXXXX
— гораздо разумнее.Короче говоря, хотя пользователи композиторов, очевидно, набросились на конкурирующие библиотеки (в частности, на Iban), возможно, из-за того, что нам потребовалось время для интеграции файла композитора, эти библиотеки часто представляют собой либо полноценные веб-фреймворки, либо обременительные зависимостями, менее зрелые, терпят неудачу. не поддерживать парадигму процедурного программирования (когда AbstractProductClassMakerFactories просто не подойдет), использовать данные из сомнительных источников, склонны использовать лицензии, которые несовместимы с некоторыми коммерческими видами использования и откровенно лишены функций.
Итак, бесстрашный пользователь... выберите php-iban : этическую, функциональную, перспективную и простую библиотеку для обработки IBAN и IIBAN. Выбирайте победу! ;)
Если вам известен URL-адрес национального документа IBAN, BBAN или национальной контрольной суммы из официальных источников, сообщите нам об этом в выпуске № 39 и № 41.
Банки Фарерских островов (FO) не отвечают, как и Датский национальный банк, который направил меня к ним.
Люксембург (LU), похоже, не соответствует ни одной системе контрольных сумм. Хотя некоторые IBAN проверяются с помощью достаточно распространенных систем, другие этого не делают или используют другие. Предположение о том, что в Люксембурге существует национальная система контрольных сумм, на самом деле может быть неверным. Здесь нам нужны некоторые разъяснения, надеюсь, кто-нибудь сможет найти официальное заявление.
В Мавритании (MR) используется система контрольных сумм с двумя символами, но в нашем примере IBAN не соответствует MOD97-10, который является ожидаемой системой. Раньше IBAN здесь всегда был фиксированным и составлял 13 цифр контрольной суммы, однако, начиная с версии реестра v66, он теперь является динамическим, что предполагает измененную или, по крайней мере, теперь смягченную на национальном уровне систему контрольной суммы.
Если вы готовы потратить некоторое время на поиск, нам не помешало бы предоставить еще несколько тестовых номеров IBAN для большинства стран, особенно для небольших...
Вышла версия 4.2.3 .
Вышла версия 4.2.2 .
Вышла версия 4.2.1 .
Вышла версия 4.2.0 .
Вышла версия 4.1.1 .
Вышла версия 4.1.0 .
Вышла версия 4.0.0 .
Вышла версия 3.0.3 .
Вышла версия 3.0.2 .
Вышла версия 3.0.0 .
Вышла версия 2.8.2 .
Вышла версия 2.8.1 .
TL
BBAN удалило лишние пробелы (не повлияло на проверку IBAN). (Спасибо @DanyCorbineauBappli) Вышла версия 2.8.0 .
Вышла версия 2.7.5 .
Вышла версия 2.7.4 .
iban_to_obfsucated_format()
или ObfuscatedFormat()
для запутывания IBAN для определенных сценариев вывода (например, относительной идентификации).Вышла версия 2.7.3 .
Вышла версия 2.7.2 .
Вышла версия 2.7.1 .
Вышла версия 2.7.0 .
Вышла версия 2.6.9 .
SM
).Вышла версия 2.6.8 .
IT
).Вышла версия 2.6.7 .
SK
).Вышла версия 2.6.6 .
ini_set
Вышла версия 2.6.5 .
gmp
.Вышла версия 2.6.4 .
bcmath
Вышла версия 2.6.3 .
Вышла версия 2.6.2 .
Вышла версия 2.6.1 .
Вышла версия 2.6.0 .
Вышла версия 2.5.9 .
Вышла версия 2.5.8 .
Вышла версия 2.5.7 .
Вышла версия 2.5.6 .
Вышла версия 2.5.5 .
Вышла версия 2.5.4 .
Вышла версия 2.5.3 .
Вышла версия 2.5.2 .
Вышла версия 2.5.1 .
908
) в Сербии (RS), похоже, имеет несколько действующих номеров IBAN с неверными национальными контрольными суммами, поэтому мы игнорируем все национальные контрольные суммы на счетах этого банка.Вышла версия 2.5.0 .
INGB
(ING Bank), которые удалили исходную контрольную сумму01
(Банк Словении), который не учитывает контрольные суммыutils/example-ibans
поддерживается библиотека тестовых номеров IBAN, в которой уже имеется большое количество записей для большого количества стран. Это должно упростить будущие исследования.Вышла версия 2.4.20 .
Вышла версия 2.4.19 .
Вышла версия 2.4.18 .
Вышла версия 2.4.17 .
01
в Словении (SI)) не реализует национальную схему контрольной суммы в качестве особого случая. В реализацию национальной контрольной суммы Словении было добавлено исключение.Вышла версия 2.4.16 .
Вышла версия 2.4.15 .
Вышла версия 2.4.14 .
Вышла версия 2.4.13 .
iban_mistranscription_suggestions()
теперь работает корректно при передаче строк типа IBAN в свободном формате._verhoeff()
, который поддерживает некоторые национальные реализации контрольной суммы, теперь работает правильно при передаче недопустимых входных данных.Вышла версия 2.4.12 .
Вышла версия 2.4.11 .
central_bank_url
и central_bank_name
, например:Вышла версия 2.4.10 .
currency_iso4217
хранит официальную валюту страны в формате альфа-кода ISO4217, например:Вышла версия 2.4.9 .
parent_registrar
хранится страна IBAN родительского регистратора страны IBAN, например:Вышла версия 2.4.8 .
Вышла версия 2.4.7 .
Вышла версия 2.4.6 .
Вышла версия 2.4.5 .
Вышла версия 2.4.4 .
Вышла версия 2.4.3 .
Вышла версия 2.4.2 .
Вышла версия 2.4.1 .
Вышла версия 2.4.0 .
iban_{set|find|verify}_nationalchecksum()
и их эквивалентов OO-оболочки. В настоящее время поддерживаются Бельгия (BE), Франция (FR) и Испания (ES). Если вы хотите, чтобы ваша страна поддерживалась, см. выпуск № 39 и выпуск № 41. Вышла версия 2.3.1 .
Вышла версия 2.3.0 .
Вышла версия 2.2.0 .
Вышла версия 2.1.9 .
Вышла версия 2.1.8 .
Вышла версия 2.1.7 .
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
.Вышла версия 2.1.5 .
machine_format_only
для verify_iban()
чтобы закрыть проблему № 22.Вышла версия 2.1.4 .
Вышла версия 2.1.3 .
iban_to_human_format()
при передаче входных данных, уже содержащих пробелы.Вышла версия 2.1.2 . Все известные неофициальные коды стран IBAN теперь интегрированы. Помимо небольших обновлений документации и сокращения заявленного названия Косово, в эту версию добавлено:
Вышла версия 2.1.1 . В настоящее время неофициальные коды стран IBAN интегрируются, и этот процесс продолжается. В этой версии добавлено:
Выпущена версия 2.1.0 .
В настоящее время неофициальные коды стран IBAN интегрируются, и этот процесс продолжается. Был создан новый флаг, чтобы проверить, является ли страна официальной записью, выпущенной SWIFT, или нет. Поэтому были добавлены следующие новые страны.
Также обратите внимание, что запись IIBAN (AA) была помечена как неофициальная, а функции, перечисленные в docs/TODO
были перенесены в выпуски Github, а этот файл удален.
Вышла версия 2.0.1 . Это сделано для того, чтобы отпраздновать настоящее тестирование, поддержку композиторов, а также наконец-то увидеть изменения. Эта версия должна быть актуальной со всеми изменениями реестра на данный момент, включая изменения или дополнения к странам:
Вышла версия 1.6.0 . В этой версии больше исправлений реестра (новые добавленные территории с ошибочными данными, неверные контрольные суммы в образцах IBAN и т. д.), а также расширенные процедуры тестирования, расширенная и исправленная документация. Всем пользователям рекомендуется обновиться. Теперь у нас есть автоматическое выполнение тестовых сценариев с помощью Travis CI, чтобы обеспечить дополнительную надежность всего зафиксированного кода. Это заняло больше времени, чем ожидалось, поскольку, к сожалению, я выбрал точное время, когда Трэвис сломал их журналы сборки - https://www.traviscistatus.com/incidents/fcllblkclgmb - чтобы увидеть, о чем идет весь этот шум... еще раз доказав, что облачные вычисления - это просто отлично подходит для неожиданной поломки вещей. Поскольку они хотят что-то скрыть, отладочных данных буквально не было, и я решил, что это моя вина. Дорогие программисты, обратите внимание: наступает эпоха мистического провала.
Вышла версия 1.5.0 . Никаких изменений кода не произошло, но теперь у нас есть интеграция с http://packagist.org/, надеюсь, это заставит его начать работать. Если вы используете packagegist, теперь вы можете добавить библиотеку в свой проект, просто запустив composer require globalcitizen/php-iban
(спасибо @acoulton за указание пути)
Версия 1.4.9 была выпущена с использованием нового процесса выпуска на базе Github. Надеемся, что это станет надежной опорой для тех, кто объединяет библиотеку с другим программным обеспечением. У нас также есть файл метаданных композитора для облегчения интеграции. Интегрированы новые URL-адреса реестра IBAN. Удалена старая структура тегов/магистралей SVN.
Исправлен URL-адрес SWIFT на странице IBAN. Подчеркнутая поддержка ошибок в транскрипции.
Наконец, Google удалил code.google.com
, и мы перешли на Github! Как только старая структура trunk
/ tag
(сохранившаяся из svn
) будет очищена и этот документ переведен из старого формата вики в уценку, будет выпущена новая версия.
Вышла версия 1.4.6 :
К сожалению, Google теперь требует, чтобы проекты code.google.com
использовали Google Drive. Я пытался использовать Google Диск (зарегистрировал новую учетную запись, пробежался по электронной почте, со мной обращались как с роботом, изучил новый дурацкий, приятный на ощупь интерфейс, получал бессмысленные сообщения об ошибках, такие как «Ваш лимит общего доступа превышен» (с 2x290 КБ файлов в новой учетной записи, которую мне сказали создать) и полностью потерял терпение.
Так что на данный момент вам просто нужно загрузить его с помощью git
. Вскоре я перенесу php-iban
на Github. В последнее время Google действительно стал занозой в заднице из-за всего этого барахла из Google+ и Google Диска, разрушения Picasa, разрушения Sketchup из-за недостатка внимания и т. д. О чем они думают?
Вышла версия 1.4.5 :
Вышла версия 1.4.4 :
Репозиторий исходного кода проекта переключился с svn
(тьфу) на git
(Yay!) .
Версия 1.4.3 была выпущена:
docs/COMEDY-OF-ERRORS
и Inline в рамках реестра.Версия 1.4.2 была выпущена:
Версия 1.4.1 была выпущена:
$__disable_iiban_gmp_extension=true;
)Версия 1.4.1 все еще готовится, раздавив некоторые ошибки и обновляя реестр ... Между тем, мое внимание пришло к тому, что мы были представлены в блоге Code Candy! http://www.codecandies.com/2012/05/30/no- Exceptions/ horay за немецкое чувство юмора! Ха-ха.
Версия 1.4.0 была выпущена:
VERSION
, чтобы включить информацию о жесткой версии в исходное дерево, по запросу. Версия 1.3.9 была выпущена:
Версия 1.3.8 была выпущена:
Версия 1.3.7 была выпущена:
Версия 1.3.6 была выпущена:
Версия 1.3.5 была выпущена:
Версия 1.3.4 была выпущена:
Версия 1.3.3 была выпущена:
Версия 1.3.2 была выпущена:
Версия 1.3.1 была выпущена:
Версия 1.3.0 была выпущена. Этот релиз добавляет поддержку ошибки ошибок.
Версия 1.2.0 была выпущена. Этот релиз добавляет поддержку Internet Internate International Number Comber (IIBAN), согласно текущему интернет-проекту IIBAN по адресу http://tools.ietf.org/html/draft-iiban-01
Версия 1.1.2 была выпущена. Это добавляет длинные открытые теги в основной библиотечный файл, чтобы упростить развертывание во многих установках PHP по умолчанию.
Версия 1.1.1 была выпущена. Это исправляет опечатку в вызове функции в новой обертке OO. Пользователям не нужно обновлять.
Версия 1.1.0 была выпущена. Эта версия добавляет объектно -ориентированную библиотеку обертки и соответствующие обновления для документации и тестовых сценариев. Для обновления существующих пользователей не важно.
Версия 1.0.0 была выпущена. Эта версия включает в себя следующие изменения:
iban_country_is_sepa($iban_country)
iban_to_human_format($iban)
Ранее в этом месяце ... Небольшой выпуск обслуживания , не критический.
*Теперь у нас есть список рассылки http://groups.google.com/group/php-iban-users. Не стесняйтесь публиковать свои отзывы, запросы или предложения - мы хотели бы знать, как вы используете библиотеку. На сегодняшний день проект достиг более 400 загрузок и все еще стал сильным, с более чем одним новым пользователем в день - довольно хороший показ для специализированной библиотеки!
* Версия 12 была выпущена. Файл реестра был улучшен, частично в результате отчетов пользователей и частично в результате выявленных проблем при выполнении автоматических тестов против версии 11.
Несмотря на исправленную строку заголовка Два столбца не были представлены в заголовке ( bban_length
и iban_length
). Теперь они были добавлены.
Исправления записей реестра для французских территорий (PF, TF, YT, NC, PM, WF) Французские территории явно не включены в текстовый файл Swift Specification. Они были дублированы из Франции в соответствии с неструктурированными комментариями против этой записи. Пример ibans были сделаны для иллюстративных целей, просто изменяя префикс страны без восстановления контрольных сумм. Примеры IBAN, включенные для этих территорий, теперь должны быть правильными.
Гибралтар и Венгрия (GI, HU) исправили ошибку, в которой обе территории имели лишнюю толстую кишку, добавившись к их регулярным выражениям после первоначального преобразования документов, что вызывало проверку для всех ибанов в этих странах.
Маврикий (MU) исправил ожидание длины Iban с 31 до 30.
Пример Швеции (SE) 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 );
# 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 );
Использование OO обескуражено, так как существует современная тенденция для чрезмерного использования модели. Однако, если вы предпочитаете OO 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 ();
# 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-Api-Net |
Ява | Iban-Api-Java |
Ява | iban4j |
Ява | Ява-Ибан |
Javascript | iban.js |
Javascript | Нг-Ибан |
Objectivec | Iban-helper |
Objectivec | ibanvalidation |
Перл | Различные библиотеки CPAN |
Питон | Django-Localflav |
Питон | Ибан-генератор |
Руби | банк |
Руби | iban-tools |
Руби | ibandit |
Руби | Ибанизатор |
Руби | Изоибан |