Генератор и валидатор на IBAN - Тестване на банкови данни
Генерирайте валидни тестови IBAN или незабавно валидирайте съществуващи. Поддържа 10 европейски държави с MOD 97 валидация. Перфектен за тестване и разработка на финансов софтуер.
Генератор и Валидатор на IBAN
Документация
Генератор и валидатор на IBAN
Какво прави този инструмент
Тествате ли финансов софтуер без реални банкови данни? Ще ви трябват валидни IBAN формати, които преминават проверки за валидност. Този инструмент генерира случайни IBAN номера, които следват специфичните за страната формати, и валидира съществуващи такива, като използва ISO 13616 стандарта.
Ето практическия проблем, който решава: при изграждане на платежни системи или банкови приложения, имате нужда от тестови данни, които няма да се провалят при валидация, но и не рискуват да разкрият истински номера на сметки. Честа грешка, която правят разработчиците, е създаването на "фалшиви" IBAN номера, които не преминават MOD 97 проверката, което може да причини тестовете да се провалят по грешни причини.
Инструментът извършва две основни задачи:
- Генератор: Създава структурно валидни IBAN номера за всяка поддържана страна. Всеки генериран номер преминава същите валидационни проверки, които ще се изпълнят в производствената система.
- Валидатор: Проверява IBAN структура, контролни цифри и специфичното за страната форматиране. Полезен е за отстраняване на грешки, когато IBAN бъде отхвърлен.
IBAN (Международни Банкови Номера на Сметки) стандартизират начина, по който банките идентифицират сметки през граница. Всеки съдържа код на страната, два контролни цифри, изчислени чрез MOD 97, и Основен Банков Номер на Сметка (BBAN), който варира според страната. Това, което го прави сложен, е че Германия използва 22 знака, докато Франция се нуждае от 27, и вътрешната структура се различава напълно.
Как работят IBAN номерата
Структура и формат на IBAN
IBAN номерата могат да бъдат до 34 буквено-цифрови знака, като повечето европейски страни използват 22-27. Всеки IBAN се разделя на три части:
- Код на страната: Две букви от стандарта ISO 3166-1 alpha-2 (DE за Германия, GB за Обединеното кралство)
- Контролни цифри: Две изчислени цифри, които валидират целия IBAN чрез MOD 97
- Основен банков номер на сметка (BBAN): Специфичната за страната част, съдържаща:
- Банков идентификатор (понякога наречен маршрутен номер или банков код)
- Идентификатор на клон (в Обединеното кралство се нарича сортировъчен код)
- Номер на сметка
- Понякога допълнителни национални контролни цифри
Да вземем германски IBAN като пример. Шаблонът DE2!n8!n10!n означава:
DE= код на страната2!n= две числови контролни цифри8!n= осемцифрен банков код (Bankleitzahl)10!n= десетцифрен номер на сметка (Kontonummer)
Това, което хората не очакват, е колко много тези формати варират между страните:
| Страна | Дължина | Структура | Пример |
|---|---|---|---|
| Германия (DE) | 22 | DE2!n8!n10!n | DE89370400440532013000 |
| Обединено кралство (GB) | 22 | GB2!n4!a6!n8!n | GB29NWBK60161331926819 |
| Франция (FR) | 27 | FR2!n5!n5!n11!c2!n | FR1420041010050500013M02606 |
| Испания (ES) | 24 | ES2!n4!n4!n1!n1!n10!n | ES9121000418450200051332 |
| Италия (IT) | 27 | IT2!n1!a5!n5!n12!c | IT60X0542811101000000123456 |
Алгоритъм за валидация на IBAN
Валидацията на IBAN разчита на алгоритъма MOD 97, дефиниран в ISO 7064. Ето какво всъщност се случва при валидирането на IBAN:
- Преместете първите четири знака (код на страната и контролни цифри) в края
- Заменете всяка буква с числа: A=10, B=11, до Z=35
- Изчислете модуло 97 на получения низ от числа
- Валидните IBAN винаги произвеждат остатък точно 1
Математически:
Защо точно MOD 97? Той улавя почти всички общи грешки: грешки с единични цифри, разменени цифри, дори повечето грешки при въвеждане, включващи подобно изглеждащи знаци. На практика съм установил, че улавя около 99,9% от случайните грешки при въвеждане на данни, което е причината да стане международен стандарт.
Един интересен момент, който си заслужава да се знае: при генериране на IBAN, изчислявате контролните цифри, като започнете с "00", приложите алгоритъма, а после използвате 98 минус остатъка. Това гарантира, че крайният IBAN ще бъде валидиран правилно.
Функции на инструмента
Генератор на IBAN
Генерирайте тестови IBAN номера, които преминават валидация, без да използвате реални сметки:
- Избор на държава: Поддържа 10 основни европейски държави (Германия, Обединено кралство, Франция, Испания, Италия, Нидерландия, Швейцария, Австрия, Белгия, Полша)
- Съответствие с формата: Всеки генериран IBAN отговаря на официалната структура на държавата и преминава MOD 97 валидация
- Генериране с едно кликване: Не е необходима конфигурация - просто изберете държава и генерирайте
- Копиране в буферната памет: Едно кликване копира пълния IBAN за поставяне в тестовете
- Визуална разбивка: Цветово кодирано показване на кода на държавата, контролните цифри и банковите детайли поотделно
Процесът на генериране:
- Избира шаблон за формат, специфичен за държавата
- Попълва случайни цифри/букви в BBAN частта
- Изчислява контролните цифри чрез MOD 97
- Сглобява и валидира пълния IBAN
Професионален съвет: При попълване на тестови бази данни, генерирайте IBAN от различни държави, за да тествате трансгранични сценарии. Реалните платежни системи често имат гранични случаи със специфични държави.
IBAN Валидатор
Проверете структурата на IBAN и хванете форматни проблеми преди влизане в производство:
- Проверка на формата: Проверява изискванията за дължина и структура, специфични за държавата
- MOD 97 Валидация: Извършва пълния алгоритъм за проверка на контролните цифри
- Разбивка на компонентите: Показва точно как IBAN се разделя на код на държавата, контролни цифри, банков код и номер на сметка
- Специфични съобщения за грешки: Вместо общи съобщения за невалидност, ще видите какво точно не е наред
- Автоматично форматиране: Работи с IBAN с или без интервали - форматирането се извършва автоматично
Проверките за валидация се извършват в следния ред:
- Разпознаване на кода на държавата (поддържа ли се?)
- Проверка на дължината (правилен ли е броят на знаците за тази държава?)
- Валидация на типа знаци (цифри, където се очаква, букви, където са позволени)
- Изчисляване на контролните цифри чрез MOD 97 (математиката работи ли?)
Често срещан сценарий: Вашето API получава IBAN от потребителски вход с непоследователно разстояние между знаците. Използвайте валидатора, за да го нормализирате преди обработка - той автоматично премахва интервалите и ви показва правилния формат.
Стъпка по стъпка ръководство
Генериране на IBAN
- Достъп до раздел Генератор: Щракнете върху раздела "Генератор" (избран по подразбиране)
- Избор на държава: Изберете желаната от вас държава от падащото меню
- Генериране на IBAN: Щракнете върху бутона "Генериране на IBAN"
- Преглед на резултата: Генерираният IBAN ще се появи по-долу с визуална разбивка на неговите компоненти
- Копиране в буферната памет: Щракнете върху бутона "Копиране в буферната памет", за да копирате IBAN за употреба другаде
Валидиране на IBAN
- Достъп до раздел Валидатор: Щракнете върху раздела "Валидатор"
- Въвеждане на IBAN: Въведете или поставете IBAN в полето за въвеждане
- Интервалите и форматирането ще бъдат обработени автоматично
- Инструментът приема както форматирани (с интервали), така и нeформатирани IBAN
- Преглед на резултатите от валидирането: Инструментът ще валидира IBAN автоматично, докато въвеждате
- Проверка на детайлите: За валидни IBAN ще бъде показана разбивка на компонентите
- Преглед на евентуални грешки: За невалидни IBAN ще бъдат показани конкретни съобщения за грешки, които ще помогнат за идентифициране на проблема
Приложения и реални употреби
Разработка на софтуер и тестване
Тестване на API: При изграждане на тестове за плащания, ще ви трябват IBAN-ове, които преминават валидация, но няма да предизвикат реални транзакции. Генерирайте пакет от тестови IBAN-ове за вашия автоматизиран тестови комплект, като гарантирате, че вашата обработка на грешки работи правилно за различни формати на страни.
Валидация на формуляри: Тествате ли checkout процес? Използвайте валидатора, за да проверите дали вашата frontend валидация отговаря на backend изискванията. Честа грешка е приемането на IBAN формат, който вашият разплащателен процесор ще отхвърли по-късно - улавянето на това по време на разработката спестява разочарование на клиентите.
Тестване на гранични случаи: Повечето разработчици тестват с един или два формата на страни. Какво се случва, когато швейцарски клиент с 21-символен IBAN използва вашата система, проектирана около немски 22-символни IBAN-ове? Генерирайте различни формати на страни, за да тествате стреса на вашите полета и логика за валидация.
Регресионно тестване: След актуализиране на вашата IBAN валидационна библиотека, пуснете генерирани тестови IBAN-ове през старата и новата версия. Всички несъответствия показват промени, които могат да засегнат производствената среда.
Разработка на финансови приложения
Платежни системи: При изграждане на функционалност за международни парични преводи, ще срещнете сценарии, където самата IBAN структура определя маршрутизационното поведение. Тестови IBAN-ове от Нидерландия (които включват букви в BBAN) разкриват бъгове, които всички цифрени немски IBAN-ове няма да уловят.
Банков софтуер: Парсването на IBAN-ове за извличане на банкови кодове и клонови идентификатори изисква специфична за страната логика. Генерирайте IBAN-ове за всяка поддържана страна, за да потвърдите, че вашият парсващ алгоритъм правилно идентифицира тези компоненти.
Проверка за съответствие: Финансовите разпоредби често изискват валидиране на IBAN-ове преди обработка. Използвайте този инструмент, за да създадете тестови случаи, доказващи, че вашата система отхвърля невалидни контролни цифри и неправилни формати - същественo за одитни следи.
Образование и документация
Образование по банкови стандарти: Студентите, които изучават международни платежни системи, се възползват от това да виждат реални IBAN структури. Генерирайте примери от различни страни, за да илюстрирате как стандартизацията работи в различни банкови системи.
API документация: Вместо да използвате потенциално реални IBAN-ове в техническата си документация, генерирайте чисти примери. Документация с фрази като "Използвайте IBAN DE89370400440532013000 за тестване" веднага показва на разработчиците, че това са безопасни тестови стойности.
Операции с данни
Засяване на бази данни: Средите за разработка и етапно тестване се нуждаят от реалистични тестови данни. Генерирайте разнообразни IBAN-ове, за да populate вашата база данни с представителни международни клиентски профили без проблеми с поверителността.
Анонимизация на данни: Мигрирате ли от производствена към етапна среда? Заменете истинските IBAN-ове с генерирани, които поддържат валидност на формата за тестване, като премахвате чувствителна информация. Критично за GDPR съответствие в среди за разработка.
Алтернативи и кога да ги използваме
Различните инструменти са подходящи за различни нужди. Ето честно сравнение:
Търговски банкови API (напр. Stripe, Adyen)
Най-добри за производствена валидация спрямо реални банкови регистри. Тези услуги проверяват дали IBAN съответства на действителна активна сметка, а не само дали форматът е правилен.
Използвайте, когато: Трябва да потвърдите, че IBAN съществува и може да получава плащания, а не само че е структурно валиден.
Ограничения: Струва пари (обикновено ценообразуване на база извикване на API), изисква интеграционна работа и все пак ви трябват тестови IBAN-и за разработка - точно за това служи този инструмент.
Библиотеки за програмни езици (ibantools, iban.js, python-stdnum)
Най-добри за вградена валидация във вашия приложен код. Библиотеки като ibantools за JavaScript или python-stdnum за Python предоставят функции както за валидация, така и за генериране.
Използвайте, когато: Имате нужда от програмен достъп като част от вашата валидация по време на изграждане или по време на изпълнение.
Ограничения: Изисква разработване за интеграция и все пак ви трябва бърз начин да тествате ръчно конкретни IBAN-и по време на отстраняване на грешки. Точно затова уеб инструментът е по-бърз от писането на тестови скриптове.
SWIFT IBAN Регистър
Официалният IBAN регистър, поддържан от SWIFT, съдържа списък на всички формати на страни и правила за валидация. Това е авторитетният източник.
Използвайте, когато: Внедрявате IBAN поддръжка от нулата и се нуждаете от официалните спецификации.
Ограничения: Това е документация, а не инструмент. Все пак ще трябва да изградите или намерите нещо, което действително да генерира и валидира IBAN-и въз основа на тези спецификации.
Официални банкови валидатори
Много национални банки предоставят validators за конкретни страни (напр. Bundesbank за германски IBAN-и). Те са изключително точни за съответната им страна.
Използвайте, когато: Работите само с една страна и се нуждаете от подробности за валидация на банково ниво.
Ограничения: Фокус върху една страна. Ако изграждате международни платежни системи, ще ви трябват валидатори за всяка страна.
Кога този инструмент има смисъл
Използвайте този инструмент, когато се нуждаете от бързо тестване без API интеграция. Особено полезен е по време на разработка и отстраняване на грешки, когато веднага трябва да генерирате валидни тестови данни или да проверите защо даден IBAN не преминава валидация. Той няма да замести производствените библиотеки за валидация във вашия код, но е по-бърз от писането на временни тестови скриптове.
Често задавани въпроси
Какво е IBAN и защо е важен?
IBAN означава Международен Номер на Банкова Сметка - стандартизиран формат, създаден от Международната организация по стандартизация (ISO), за да намали грешките при трансгранични плащания. Преди IBANs всяка страна използваше собствен формат на номер на сметка, което водеше до чести грешки и неуспели преводи. IBANs добавят кодове на страните и контролни цифри, за да улавят грешки преди движението на парите.
Доколко генерираните IBANs са точни?
Генерираните IBANs са математически коректни и преминават MOD 97 валидационния алгоритъм, дефиниран в ISO 13616. Те следват правилните структури за съответната страна. Обаче те са произволно създадени и не съответстват на реални банкови сметки - точно това е целта. Те са безопасни за тестване точно защото няма да попаднат случайно върху реална сметка.
Кои страни поддържа този инструмент?
В момента 10 европейски страни: Германия, Обединеното кралство, Франция, Испания, Италия, Нидерландия, Швейцария, Австрия, Белгия и Полша. Те покриват най-разпространените IBAN формати, които ще срещнете в европейските платежни системи. Нужна ви е друга страна? Формулярът за обратна връзка е най-добрият начин да поискате допълнения.
Мога ли да използвам генерираните IBANs за реални парични преводи?
Абсолютно не. Те са само тестови IBANs. Те преминават форматна валидация, но не са свързани с реални банкови сметки. Използването им за действителни транзакции ще доведе до неуспех или отхвърляне на плащането. Те са предназначени само за разработка, тестване и образователни цели.
Как всъщност работи IBAN валидацията?
Валидаторът извършва четири проверки последователно:
- Код на страната: Разпознат ли е двубуквен код?
- Дължина: Съответства ли на изискваната дължина за тази страна? (Германия = 22, Обединено кралство = 22, Франция = 27 и т.н.)
- Типове знаци: Буквите и цифрите на правилните позиции ли са според формата на страната?
- MOD 97 проверка: Математическата контролна сума равна ли е на 1 съгласно ISO 7064?
Ако някоя проверка не премине, ще видите конкретно съобщение за грешка, обясняващо какво не е наред.
Имат ли значение интервалите в IBANs?
Не за валидацията. IBANs обикновено се показват с интервали (по групи от четири) за четимост, но интервалите са козметични. DE89 3704 0044 0532 0130 00 и DE89370400440532013000 са идентични за целите на валидацията. Инструментът обработва автоматично и двата формата.
Изпращат ли се моите данни към сървър или съхраняват ли се някъде?
Не. Всичко се изпълнява във вашия браузър чрез JavaScript. Нито един IBAN данни не напуска вашата машина, не докосва сървър и не се съхранява никъде. Можете да проверите това, като отворите браузер dev tools и наблюдавате мрежовата страница - няма да видите никакви заявки при генериране или валидиране на IBANs.
Какво да направя, ако трябва да валидирам IBAN от страна, която не е в списъка?
Инструментът в момента поддържа само 10-те страни в падащото меню. Добавянето на повече изисква прилагане на специфичните правила за формата на всяка страна. Ако се нуждаете от валидация за страни като Норвегия, Швеция или други, дайте ни знак чрез формуляра за обратна връзка - ние приоритизираме добавянията въз основа на търсенето.
Защо правилно форматиран IBAN може да не премине валидация?
Най-разпространените причини:
- Неправилни контролни цифри: Дори една грешна цифра проваля MOD 97 теста
- Правописни грешки: Разменени знаци или грешни цифри навсякъде в IBAN
- Грешна дължина: Липсващи или допълнителни знаци за тази страна
- Невалидни знаци: Букви там, където са позволени само цифри, или обратното
- Неподдържана страна: Кодът на страната съществува, но не е в нашия списък за поддръжка
Съобщението за грешка ще ви каже точно какво не е наред.
Как мога да докладвам бъгове или да поискам функции?
Използвайте формуляра за обратна връзка в долната част на страницата. Конкретните доклади за бъгове с примерни IBANs са най-полезни. За заявки за функции обяснението на вашия случай на употреба помага да приоритизираме какво ще бъде изградено следващо.
Каква е разликата между IBAN и SWIFT/BIC кодове?
IBANs идентифицират конкретни банкови сметки, докато SWIFT/BIC кодовете идентифицират банки или банкови клонове. Помислете така: SWIFT кодът ви казва коя банка, а IBAN - коя сметка в тази банка. За международни преводи често се нуждаете и от двете - SWIFT кодът насочва към правилната банка, а после IBAN - към конкретната сметка.
Мога ли да валидирам IBAN без да знам страната?
Да, защото първите две букви на всеки IBAN са кодът на страната. Валидаторът чете тези първи два знака, за да определи кой формат на страната да приложи. Ето защо откриването на страната се случва автоматично, когато поставите IBAN - не е нужно да избирате страната ръчно.
Съществуват ли IBAN формати за страни извън Европа?
Да, но по-малко. Докато IBAN възникна в Европа и има най-висока степен на възприемане там, страни като Саудитска Арабия, ОАЕ, Бразилия и други са го възприели. Този инструмент в момента се фокусира върху европейските формати, тъй като те представляват преобладаващата част от трансграничните транзакции. SWIFT IBAN регистърът поддържа пълния списък.
Как да четем и декодираме IBAN
Някога ли сте поглеждали IBAN като DE89370400440532013000 и сте се чудили какво означава всяка част? Ето как да декодирате всеки IBAN:
Стъпка 1: Код на страната (първите 2 знака)
DE= Германия- Показва кои правила за формат се прилагат
Стъпка 2: Контролни цифри (следващите 2 знака)
89= изчислена контролна сума- Тези цифри потвърждават, че целият IBAN е валиден, като използват MOD 97
Стъпка 3: Банков код (варира според страната)
37040044в германски IBAN = 8-цифров банков идентификатор- Различните страни използват различни дължини (Великобритания използва 4 знака)
Стъпка 4: Номер на сметка (останалите знаци)
0532013000= действителният номер на сметка в тази банка- Дължината и форматът зависят от страната
Различните страни организират BBAN частта по различен начин. Британските IBAN включват 6-цифров сортировъчен код (идентификатор на клон) между банковия код и номера на сметката. Френските IBAN комбинират банковия код, кода на клона и номера на сметката с контролен ключ. Разбирането на тези различия е от решаващо значение при програмното анализиране на IBAN.
Общи грешки при валидация на IBAN и как да ги отстраним
При прилагане на IBAN валидация ще срещнете следните проблеми многократно:
Грешка "Невалидни контролни цифри"
Причина: Изчислението по MOD 97 не се равнява на 1. Или контролните цифри са грешни, или има друга грешка в IBAN.
Решение: Изпълнете валидацията отново след коригиране на евентуални правописни грешки. Дори една неправилна буква или цифра навсякъде в IBAN може да причини неуспех на контролните цифри. Това е умишлено — улавя грешки при въвеждане на данни.
Грешка "Неправилна дължина за страната"
Причина: IBAN има твърде много или твърде малко символи за неговия код на страна.
Решение: Проверете дали кодът на страната отговаря на предвидената страна. Германските IBAN са винаги 22 символа, британските IBAN са 22, френските са 27. Липсващи или допълнителни символи показват съкращаване или неправилни данни.
Грешка "Невалидни символи"
Причина: Символи, които не би трябвало да се появяват на това място — като букви, където са позволени само цифри.
Решение: Проверете формата, специфичен за страната. Например, германските IBAN са изцяло цифрови след кода на страната и контролните цифри, докато британските IBAN включват 4 букви за банковия код.
Грешка "Неподдържан код на страна"
Причина: Първите две букви не са разпознат код на страна или не се поддържат от вашия валидатор.
Решение: Проверете правописа на кода на страната. Чести грешки са използването на UK вместо GB или EN вместо кодове на страни. Този инструмент поддържа 10 европейски страни; производствените валидатори трябва да поддържат всички страни от SWIFT регистъра.
Формат спрямо съществуване на сметка
Важно разграничение: валидацията потвърждава, че IBAN е структурно правилен, но не че сметката съществува. IBAN може да премине всички проверки за валидност, но да не съответства на реална банкова сметка. За производствени платежни системи са необходими допълнителни проверки извън форматната валидация.
Техническа имплементация за разработчици
Ако изграждате поддръжка за IBAN във вашето приложение, ето битово тествани примери за код на множество езици. Тези имплементации обработват крайните случаи, които ще срещнете в производството:
Валидация на IBAN
1function validateIban(iban) {
2 // Премахване на интервали и преобразуване към главни букви
3 const cleanedIban = iban.replace(/\s/g, '').toUpperCase();
4
5 // Проверка на основния формат
6 if (!/^[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}$/.test(cleanedIban)) {
7 return false;
8 }
9
10 // Пренареждане и преобразуване на букви към числа
11 const rearranged = cleanedIban.substring(4) + cleanedIban.substring(0, 4);
12 const converted = rearranged.split('').map(char => {
13 if (/[A-Z]/.test(char)) {
14 return (char.charCodeAt(0) - 55).toString();
15 }
16 return char;
17 }).join('');
18
19 // Изчисляване на mod 97
20 let remainder = 0;
21 for (let i = 0; i < converted.length; i++) {
22 remainder = (remainder * 10 + parseInt(converted[i], 10)) % 97;
23 }
24
25 return remainder === 1;
26}
27
28// Примерно използване
29console.log(validateIban('DE89 3704 0044 0532 0130 00')); // true
30console.log(validateIban('GB29 NWBK 6016 1331 9268 19')); // true
31console.log(validateIban('DE89 3704 0044 0532 0130 01')); // false (невалидни контролни цифри)
321def validate_iban(iban):
2 # Премахване на интервали и преобразуване към главни букви
3 iban = iban.replace(' ', '').upper()
4
5 # Основна проверка на формата
6 if not (len(iban) > 4 and iban[:2].isalpha() and iban[2:4].isdigit()):
7 return False
8
9 # Преместване на първите 4 символа в края
10 rearranged = iban[4:] + iban[:4]
11
12 # Преобразуване на букви към числа (A=10, B=11, ..., Z=35)
13 converted = ''
14 for char in rearranged:
15 if char.isalpha():
16 converted += str(ord(char) - 55)
17 else:
18 converted += char
19
20 # Проверка дали mod 97 е равно на 1
21 return int(converted) % 97 == 1
22
23# Примерно използване
24print(validate_iban('DE89 3704 0044 0532 0130 00')) # True
25print(validate_iban('GB29 NWBK 6016 1331 9268 19')) # True
26print(validate_iban('DE89 3704 0044 0532 0130 01')) # False (невалидни контролни цифри)
271public class IbanValidator {
2 public static boolean validateIban(String iban) {
3 // Премахване на интервали и преобразуване към главни букви
4 String cleanedIban = iban.replaceAll("\\s", "").toUpperCase();
5
6 // Основна проверка на формата
7 if (!cleanedIban.matches("[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}")) {
8 return false;
9 }
10
11 // Преместване на първите 4 символа в края
12 String rearranged = cleanedIban.substring(4) + cleanedIban.substring(0, 4);
13
14 // Преобразуване на букви към числа
15 StringBuilder converted = new StringBuilder();
16 for (char c : rearranged.toCharArray()) {
17 if (Character.isLetter(c)) {
18 converted.append(c - 'A' + 10);
19 } else {
20 converted.append(c);
21 }
22 }
23
24 // Изчисляване на mod 97
25 BigInteger numeric = new BigInteger(converted.toString());
26 return numeric.mod(BigInteger.valueOf(97)).intValue() == 1;
27 }
28
29 public static void main(String[] args) {
30 System.out.println(validateIban("DE89 3704 0044 0532 0130 00")); // true
31 System.out.println(validateIban("GB29 NWBK 6016 1331 9268 19")); // true
32 System.out.println(validateIban("DE89 3704 0044 0532 0130 01")); // false
33 }
34}
35Генериране на IBAN
1function generateIban(countryCode) {
2 const countryFormats = {
3 'DE': { length: 22, bbanPattern: '8n10n' },
4 'GB': { length: 22, bbanPattern: '4a6n8n' },
5 'FR': { length: 27, bbanPattern: '5n5n11c2n' }
6 // Добавете повече държави при необходимост
7 };
8
9 if (!countryFormats[countryCode]) {
10 throw new Error(`Кодът на държавата ${countryCode} не се поддържа`);
11 }
12
13 // Генериране на случаен BBAN въз основа на шаблона на държавата
14 let bban = '';
15 const pattern = countryFormats[countryCode].bbanPattern;
16 let i = 0;
17
18 while (i < pattern.length) {
19 const count = parseInt(pattern.substring(i + 1), 10);
20 const type = pattern[i];
21
22 if (type === 'n') {
23 // Генериране на цифрови символи
24 for (let j = 0; j < count; j++) {
25 bban += Math.floor(Math.random() * 10);
26 }
27 } else if (type === 'a') {
28 // Генериране на азбучни символи
29 for (let j = 0; j < count; j++) {
30 bban += String.fromCharCode(65 + Math.floor(Math.random() * 26));
31 }
32 } else if (type === 'c') {
33 // Генериране на буквено-цифрени символи
34 for (let j = 0; j < count; j++) {
35 const isLetter = Math.random() > 0.5;
36 if (isLetter) {
37 bban += String.fromCharCode(65 + Math.floor(Math.random() * 26));
38 } else {
39 bban += Math.floor(Math.random() * 10);
40 }
41 }
42 }
43
44 i += 2;
45 }
46
47 // Изчисляване на контролните цифри
48 const checkDigits = calculateCheckDigits(countryCode, bban);
49
50 return countryCode + checkDigits + bban;
51}
52
53function calculateCheckDigits(countryCode, bban) {
54 // Създаване на първоначален IBAN с '00' като контролни цифри
55 const initialIban = countryCode + '00' + bban;
56
57 // Пренареждане и преобразуване на букви към числа
58 const rearranged = bban + countryCode + '00';
59 const converted = rearranged.split('').map(char => {
60 if (/[A-Z]/.test(char)) {
61 return (char.charCodeAt(0) - 55).toString();
62 }
63 return char;
64 }).join('');
65
66 // Изчисляване на 98 минус mod 97
67 let remainder = 0;
68 for (let i = 0; i < converted.length; i++) {
69 remainder = (remainder * 10 + parseInt(converted[i], 10)) % 97;
70 }
71
72 const checkDigits = (98 - remainder).toString().padStart(2, '0');
73 return checkDigits;
74}
75
76// Примерно използване
77console.log(generateIban('DE')); // Генерира валиден немски IBAN
78console.log(generateIban('GB')); // Генерира валиден британски IBAN
791import random
2import string
3
4def generate_iban(country_code):
5 country_formats = {
6 'DE': {'length': 22, 'bban_format': '8n10n'},
7 'GB': {'length': 22, 'bban_format': '4a6n8n'},
8 'FR': {'length': 27, 'bban_format': '5n5n11c2n'}
9 # Добавете повече държави при необходимост
10 }
11
12 if country_code not in country_formats:
13 raise ValueError(f"Кодът на държавата {country_code} не се поддържа")
14
15 # Генериране на случаен BBAN въз основа на формата на държавата
16 bban = ''
17 format_str = country_formats[country_code]['bban_format']
18 i = 0
19
20 while i < len(format_str):
21 count = int(''.join(c for c in format_str[i+1:] if c.isdigit()))
22 type_char = format_str[i]
23
24 if type_char == 'n': # Цифрови
25 bban += ''.join(random.choices(string.digits, k=count))
26 elif type_char == 'a': # Азбучни
27 bban += ''.join(random.choices(string.ascii_uppercase, k=count))
28 elif type_char == 'c': # Буквено-цифрени
29 bban += ''.join(random.choices(string.ascii_uppercase + string.digits, k=count))
30
31 i += 1 + len(str(count))
32
33 # Изчисляване на контролните цифри
34 check_digits = calculate_check_digits(country_code, bban)
35
36 return country_code + check_digits + bban
37
38def calculate_check_digits(country_code, bban):
39 # Създаване на низ за изчисляване на контролните цифри
40 check_string = bban + country_code + '00'
41
42 # Преобразуване на букви към числа (A=10, B=11, ..., Z=35)
43 numeric = ''
44 for char in check_string:
45 if char.isalpha():
46 numeric += str(ord(char.upper()) - 55)
47 else:
48 numeric += char
49
50 # Изчисляване на 98 минус mod 97
51 remainder = int(numeric) % 97
52 check_digits = str(98 - remainder).zfill(2)
53
54 return check_digits
55
56# Примерно използване
57print(generate_iban('DE')) # Генерира валиден немски IBAN
58print(generate_iban('GB')) # Генерира валиден британски IBAN
59Препратки и допълнителна литература
- ISO 13616-1:2007 - Официална спецификация на IBAN структурата
- SWIFT IBAN регистър - Авторитетен източник за IBAN формати по държави
- ISO 7064:2003 - Спецификация на алгоритъм за контролни цифри MOD 97
- Европейски съвет по плащания - SEPA - Документация за Единната зона за плащания в евро
- Европейска централна банка - Платежни системи - Стандарти за европейска банкова интеграция
- Банка за международни разплащания - Платежни системи - Международни стандарти за платежни системи
Започнете тестване на IBAN номера
Нужни са ви тестови данни за вашата платежна система? Генерирайте валиден IBAN за която и да е поддържана страна по-горе или поставете съществуващ IBAN, за да проверите неговата структура. Инструментът работи изцяло във вашия браузър - без регистрации, без API ключове, без изпращане на данни към сървъри.
Бърз съвет: Генерирайте IBAN номера от различни страни, за да тествате гранични случаи. Реалните платежни системи работят с разнообразни формати, и тестването само с формат от една страна е честа причина за производствени грешки.