Product Updates
Changelog
Significant updates to ibanchecker.cash: new tools, data coverage, API features, and accuracy improvements. Minor fixes and routine maintenance are not listed. Individual bank records we published incorrectly are kept separately, in data corrections.
- New
Official Go and Rust clients, and every client now listed on the site
go get github.com/koraykoylu/ibanchecker-goandcargo add ibancheckercomplete the set: there is now an official client for Python, JavaScript, PHP, Ruby, Go and Rust, each wrapping the same five endpoints with typed results and typed errors. Until today none of them were linked from the site itself. They are listed on the API documentation and on integrations, with the install command for each. - New
Official Ruby client
gem install ibancheckeris now published on RubyGems, alongside the existing Python, PHP and JavaScript clients. It wraps the same five endpoints with typed results and typed errors, keeps the raw response body reachable so a new API field does not require a client release, and treats a malformed IBAN as a result rather than an exception. It has no runtime dependencies. See the API documentation. - Improved
Belgium, Hungary and Poland complete the register coverage
The last three national registers are in. A Belgian IBAN now resolves against all 771 codes the NBB publishes, up from 20; a Hungarian one against all 171 the MNB lists, up from 9; and a Polish one against every three-digit bank code the NBP register carries, each resolved to the bank that holds most of its routing numbers. Every country with an authoritative national register is now covered code for code. Try it on the checker.
- Improved
Six more countries resolve against their national registers
IBANs from smaller banks in Turkey, Finland, Portugal, Norway, Austria and Switzerland used to come back without a name. Each now resolves against its own national register: Norway went from 11 codes to all 2,315 the Bits register publishes, Austria from 16 to 872, and Finland, Portugal and Turkey to every code their registers list. Switzerland holds all 1,720, with the retired Credit Suisse codes marked as withdrawn rather than dropped, so an old IBAN still resolves to a name. Try it on the checker.
- New
Paid plans can be bought by card
Until today a paid plan meant emailing us and waiting for a reply. Starter, Growth and Enterprise now check out by card from the pricing page, billed monthly and cancellable at any time. Payments are handled by Polar as merchant of record, which also settles EU VAT. One thing is still done by hand: the key itself is issued to the address on the order, usually within one business day. Automatic activation on payment is next.
- Improved
German IBANs now resolve against the whole Bundesbank register
A German IBAN from a Sparkasse or a village Raiffeisenbank used to come back without a bank name: we held 80 of the 3,507 routing codes the Bundesbank publishes. All 3,430 active codes are covered now, across 435 institutions, generated straight from the register and carrying its own names. Where the register says nothing, we say nothing: it does not classify institutions or record scheme membership, so those fields stay empty rather than guessed. Try it on the checker or in the BLZ converter.
- New
A shared BIC prefix now tells you whose network it is
Some eight-character codes belong to no bank at all. In the German savings and cooperative sectors the opening characters name the network and the last three name the member, so WELADED1 is shared by 114 Sparkassen and is none of them. Asking for one used to give you nothing. Fourteen of these codes, covering 1,628 banks, now have a page listing every bank under the prefix with its city, its full BIC and the routing code that appears inside an IBAN. Start with WELADED1 or GENODEF1.
- Fixed
Seven pages named one bank after a whole savings-bank network
WELADED1 is not one bank's SWIFT code. It is the eight-character prefix that 114 different Sparkassen share, and the Bundesbank register never lists it as a code in its own right. Seven directory rows carried a prefix like that as if it were their own, so a page read "Erzgebirgssparkasse SWIFT Code: WELADED1" and every bank under that prefix resolved to it and borrowed its address. Each row now carries the bank's own eleven-character code, checked against the register and against GLEIF, and our data audit fails from now on if a row ever claims a shared prefix again.
- Improved
Slovakia now matches the national register, code for code
A Slovak IBAN could come back without a bank name for an institution that plainly exists: we held 12 of the 38 payment system codes the National Bank of Slovakia publishes. All 38 are covered now, including Citibank Europe, mBank, Komercni banka, Oberbank, BKS Bank, PKO Bank Polski, EXIMBANKA SR and both building societies. Privatbanka has been renamed Penta Bank, which the directory had not caught, and the old address still leads to the new page.
- New
Diagrams that are generated from the same data they illustrate
Until now the site explained everything in words. Every page that describes a structure now shows it as well: the anatomy of an IBAN in each of the 92 countries, the route a payment takes to reach it, the MOD-97 check worked through on a real number, the four parts of a SWIFT code, the second check many countries run inside the account number that the IBAN standard does not, and the twelve elements of a SEPA payment QR. They are drawn by generators that read the same tables the validator reads, so a diagram cannot quietly disagree with the data it illustrates, and each one names the authorities behind its figures.
- Fixed
Lists in articles had lost their bullets
Every list in every article had been rendering without markers, and numbered procedures without numbers, so a list read as a run of unattached lines. The stylesheet indented them but never restored the marker the CSS reset removes. All of them read as lists again.
- Fixed
A partial SWIFT code no longer answers with an unrelated bank
Typing part of a BIC returned a confident answer for a bank that had nothing to do with it:
/swift/abproduced Abanka,/swift/deuproduced Deutsche Bank (Suisse). The lookup was designed to let an 8-character head-office code resolve through the branch records beneath it, but it never checked the length of what it was given, so every truncation of every code in the directory was a live page. A lookup now has to be a real SWIFT/BIC code before it is answered, and a code that matches exactly is never answered with a sibling that merely shares its first eight characters. Every BIC also settles on a single address: the 8-character form, which is the one printed on statements and typed into search, with the head-office XXX spelling pointing to it. - New
IBAN Error Finder: what is wrong, and which character to look at
The homepage already said whether an IBAN is valid, and the invalid IBAN guide explained the causes in prose. Neither acted on the number in front of you. The IBAN Error Finder names which rule a rejected IBAN breaks, whether that is the country’s length, its letter and digit pattern, the ISO 13616 checksum, or the account number’s own national check digit. When the checksum is what failed it searches every IBAN one keystroke away and lists the ones that would be valid, putting first those whose bank code resolves to a real institution. Tested against 220 real IBANs damaged by a single keystroke, the original was recovered every time, but usually alongside about three other candidates, so the tool says plainly that it narrows the field rather than naming the answer.
- Fixed
The checker keeps the form on screen, and two bank logos are corrected
Checking a second IBAN used to mean scrolling to the bottom of a long result card to find the button that brought the form back. The form now stays above the result: focusing it selects the finished IBAN so a paste replaces it, and the first-visit copy steps aside once you have run a check, so the field and the result sit together. A finished check also lifts the checker to the top of the window, so the bank details fill the screen instead of starting below the headline. Separately, the logo shown for Alternatif Bank was another bank entirely, Bank Raya of Indonesia, matched in error by the tool that collects logos from Wikipedia. It is now the bank’s own logo, and Al Hilal Bank, which had none, carries its bilingual lockup.
- Improved
The RIB page explains itself, and the country pages stopped jumping
The reference tables on the French RIB converter were rebuilt: the parts of a RIB are colour coded to the part of the IBAN they become, using the same colours the country format pages use, and the clé RIB formula and its letter table carry short explanations you can open from an info icon. The bank list is permanent instead of expanding under the result, and the official sample is filled in on arrival so the tool shows what it does before you touch it. Separately, every country format page used to validate its example after the page had loaded, which pushed the rest of the page down a moment later. The verdict now ships with the page.
- New
The RIB converter now runs both ways, and reads a pasted RIB
The French RIB converter builds the IBAN as you type instead of waiting for a button, and a second mode splits an FR or MC IBAN back into its RIB. You can paste the whole RIB line, the labelled block your bank gives you, or an IBAN, and it fills the four fields itself. A recognised code banque is now named on the spot with its BIC, the clé RIB you typed is checked against the one we calculate, and the reference tables stack into readable blocks on a phone instead of scrolling sideways.
- Fixed
A valid French account number could be flagged as mistyped
The clé RIB runs from 1 to 97, so a bank prints 97 where the calculation leaves no remainder. Our national check compared against a value that had been reduced once more, which turned that 97 into 00 and told roughly one French account in ninety seven that its number looked mistyped. The check now uses the form that accepts both, so a genuine account is never flagged. Monaco, which shares the French key, was affected the same way.
- Improved
Two tools renamed to the words people actually search
The BIC validator is now the SWIFT Code Checker, and the Northern Cyprus UBAN validator is now the Northern Cyprus UBAN Checker. Nothing about the checks themselves changed. The old names led with the formal terms, BIC and validator, while people looking for these tools type SWIFT code and checker. Both old addresses redirect permanently, so existing links and bookmarks keep working. The SWIFT/BIC directory now also opens with a code entry field that hands a single code straight to the checker, instead of only offering a directory search.
- Improved
Custom social preview for the Northern Cyprus UBAN Checker
The Northern Cyprus UBAN Checker now has its own designed social preview image, shown when the link is shared on X, LinkedIn, or elsewhere, instead of the generic tools template every other tool page shares. It also linked back to a new launch post, Introducing Northern Cyprus UBAN Support, explaining why UBAN got a dedicated validator instead of being folded into the IBAN checker.
- New
Northern Cyprus bank logos
All 23 Northern Cyprus banks now show a logo: the six Turkish-bank branches reuse their parent's existing logo, the sixteen local banks got a logo sourced from each bank's own site, and the Central Bank of Northern Cyprus got its own site header wordmark, the only brand asset it publishes. Every logo was checked for a real transparent background and contrast on both light and dark surfaces before shipping; the Central Bank's mark needed a themed recolour rather than a flat white swap, to keep its two-tone red-and-grey design legible on a dark surface. Fixing this also turned up two logo-rendering bugs that predated this phase and affected every bank logo on the site, not just the new ones: a wide wordmark (a banner-style logo, much wider than tall) could render squashed or disappear entirely, and a page could briefly show the wrong light/dark variant on first load. Both are fixed everywhere a bank logo appears.
- New
Northern Cyprus bank directory
Added the 23 institutions registered under the Northern Cyprus Central Bank's UBAN regulation to a dedicated Northern Cyprus bank directory, each with its own profile page and 3-digit UBAN bank code. This is a separate registry from our main IBAN/BIC bank directory, not merged into it: most of these banks don't have an independent BIC, and Northern Cyprus UBAN isn't an IBAN. Local banks (Koopbank, İktisatbank, Creditwest Bank, Albank, and others) get a UBAN-format profile; the six Northern Cyprus branches of Turkish banks (Ziraat, Halkbank, TEB, DenizBank, Garanti BBVA, Isbank) get a separate profile explaining they typically transfer using a Turkish IBAN instead, per the regulation's own exception for foreign-bank branches. The UBAN checker now looks up the bank behind a valid UBAN's bank code against this directory, informationally, the same way it never lets a bank lookup change a checksum result.
- New
Northern Cyprus UBAN Checker
Northern Cyprus uses UBAN (Ulusal Banka Hesap Numarası), a local, 28-character account number standard defined by the Northern Cyprus Central Bank, not the ISO 13616 IBAN standard. Numbers beginning with
CTare easy to mistake for an IBAN, so we built a dedicated Northern Cyprus UBAN Checker that checks the official structure and the MOD-97-10 checksum entirely in your browser.CTis not added to our IBAN country registry: the main IBAN checker now recognises a UBAN-shaped input and points to this tool instead of showing a generic “unsupported country” error, and the Cyprus (CY) IBAN format page explains the distinction between the two. - New
Generate and validate RF creditor references (ISO 11649)
The RF creditor reference generator and validator turns an invoice or customer number into a check-digited reference, or checks one you already have. The check digit is the same ISO 7064 MOD-97-10 arithmetic an IBAN uses, just rearranged: append
RF00instead of moving the country code to the end. Generate and Validate are two explicit modes, not one field that guesses, because a raw reference and a full RF reference can share the same shape, unlike an IBAN and a BIC. Verified against python-stdnum’s iso11649 module and Finance Finland’s official implementation guide before shipping. It links out to the payment QR generator rather than building a second one, since an RF reference is one field in a much larger payload. - Improved
New logo and favicon
Both are built as true vector art: the wordmark from the actual Figtree glyphs, matched by comparing per-letter shapes across font candidates, and the icon from measured geometry, with edges snapped to true 45-degree angles and circular arcs rather than autotraced from a bitmap, so they stay crisp at any size. The colour sits on the site’s own blue,
#0057FF, with every gradient stop’s lightness preserved so the ribbon-fold shading holds up in both light and dark mode. - New
Paste a code, find out what it is
Identify a Bank Code takes a single pasted string and works out its type from shape alone: an IBAN always opens with two letters and two digits, a BIC/SWIFT code is always exactly 8 or 11 characters, and those two shapes never overlap, so the classification never depends on guessing a country first. Nothing new was written to validate what it finds. An IBAN is handed to the existing checker, a BIC is handed to the existing bank directory lookup. A code that matches neither gets an explanation of why, plus a link to the matching domestic converter when its digit count lines up with one, offered as a possibility to check rather than a confirmed identification.
- Improved
The status page now announces, not just measures
Status reported measured uptime but had no way to tell you anything: no incident history, no maintenance notice, no state you could subscribe to. It now carries a declared status line, a planned maintenance section and an incident history, published as machine-readable documents at /status/status.json and as an Atom feed at /status/feed.xml for status aggregators and readers. The two layers are deliberately separate: measurement comes from an independent monitor and nothing on the announcement side can add to it or hide it, so a declared component stays green only because we say so, never because a number was quietly adjusted. The incident history starts empty, and the page says plainly that this describes our announcements rather than a perfect record, since the daily bars show every failed check either way.
- New
Read a payment QR code back and check the account it names
Decode a payment QR takes an image of a QR code and reads the payload back byte by byte, listing all twelve EPC069-12 data elements with their byte counts, then running the IBAN it carries through our validator. It reports what the code claims and what is actually wrong with it: a missing beneficiary name, an amount outside the scheme’s range, a reference field used twice, a payload over the 331-byte budget. A decoded string is never turned into a link, because that is exactly how QR payment fraud works. Swiss QR-bills are identified but not read, since their element order belongs to a different standard.
- Improved
Payment QR generator rebuilt: SVG, PDF, live preview, and a payload inspector
The payment QR generator now previews as you type instead of behind a button, and exports vector SVG and PDF alongside high-resolution and transparent PNG. A payload inspector prints every EPC069-12 element with its value, its source, and its byte count, read out of the emitted payload so it cannot drift from what the code actually contains. Colours are checked against the ISO/IEC 15415 symbol contrast scale rather than guessed, and the printed module size is computed per code. One correction worth stating plainly: the beneficiary name field previously carried the bank’s name, which made some banking apps prefill the wrong payee. It now carries the beneficiary, and the code falls back to a plain IBAN when no name is given.
- New
Official API clients for Python and PHP
pip install ibancheckerandcomposer require ibanchecker/clientare now published on PyPI and Packagist. Both wrap the five public endpoints with typed results and typed errors, keep the raw response body reachable so a new API field does not require a client release, and treat a malformed IBAN as a result rather than an exception. The PHP client has no Composer dependencies. See the API documentation. - Fixed
Removed UK and Irish bank codes that no real IBAN can contain
A UK or Irish IBAN carries the first four letters of the bank’s BIC, so a bank code that matches no BIC cannot appear in a real account number. Five such entries had crept into our data and were resolving to bank names that would never have been reached, one of them pairing Virgin Money with the wrong logo. They are gone, a wrong BIC for Citibank Europe was corrected, and the rule is now enforced by our audit suite so the class of error cannot come back.
- New
Verification of Payee (VoP) shown on validator results
Validated results now show whether the beneficiary bank participates in the SEPA Verification of Payee scheme, added as a fifth badge next to the SEPA Credit Transfer, Instant, and Direct Debit flags. The data comes from the European Payments Council’s official VoP register of participants and covers banks that are live and able to respond to payee-name checks. This reflects scheme participation only; the live name match itself is carried out by your own payment provider.
- New
Who owns this bank: parent group shown on bank and BIC pages
Bank and SWIFT pages now say when an institution belongs to a foreign banking group, naming both the group and, where they differ, the ultimate legal parent. The relationships come from GLEIF’s parent records rather than from name matching, which is why a bank that merely shares a brand with a group is not claimed to be part of it. Where GLEIF publishes no parent, we say nothing instead of guessing.
- New
German account check digits (Prüfziffer) on every active bank code
German account numbers carry a check digit whose calculation differs by bank, across roughly ninety published methods. The validator now runs the right method for the bank code in the IBAN, covering every active Bankleitzahl in the Bundesbank directory. It is advisory: an IBAN that passes MOD-97 stays valid, and a failing account check is shown as a likely transcription error rather than a rejection. Each method was implemented from the Bundesbank specification and verified against that specification’s own test account numbers.
- New
UK modulus checking on account numbers
UK account numbers carry their own validation, defined per sort-code range in the VocaLink/Pay.UK modulus checking tables. The validator now runs it, including all fourteen documented exceptions, and reports a failure as a likely typo without rejecting the IBAN. Verified against the specification’s thirty-four published test cases.
- New
UK IBANs warn when the bank code and the sort code disagree
A UK IBAN carries both a four-letter bank code and a six-digit sort code, and the two can point at different banks when an account number has been assembled by hand. Results now flag that contradiction. The check is deliberately conservative and only fires when both sides are known, since sort-code ranges have carve-outs that make a firmer claim unsound.
- Improved
National check digits extended to 25 countries
The domestic account check digit is now verified for 25 countries, up from five: the Nordics and Baltics, Central Europe, the Western Balkans, Iceland, Poland, the Netherlands and others. Each was implemented against its national scheme and confirmed with at least two independent valid IBANs before shipping, because the failure that matters here is warning about an account that is perfectly fine. Countries whose algorithm could not be verified were left out rather than approximated.
- Improved
Bank logos: dark-mode legibility and wider coverage
Single-colour logos drawn in a dark ink were close to invisible on the dark theme. Those are now served in a light variant on dark surfaces, while genuinely coloured marks keep their brand colour on both. Coverage also grew by roughly ninety banks. Each logo is taken from the bank’s own site or an authoritative source and checked by eye on both themes, which is how a hamburger menu icon and a national coat of arms were kept out of the set.
- New
IBAN support for Burundi and Mongolia: now 92 countries
Added validation, format breakdown, and example IBANs for Burundi (BI) and Mongolia (MN), bringing coverage to 92 countries. Both structures were verified against the SWIFT IBAN Registry. See the full list on the IBAN formats page.
- New
National check-digit verification for Spain, Italy, Belgium, France & Portugal
Beyond the international MOD-97 check, the validator now also verifies the domestic check digit embedded in these countries' account numbers. If an IBAN passes MOD-97 but its national check digit doesn't match, it's flagged as a likely transcription error without being rejected, since it may still be a valid legacy account. This catches typos that the international checksum alone can miss.
- Improved
Bank & BIC data cross-checked against official registries
We cross-checked our IBAN structures and domestic bank-code-to-BIC mappings against authoritative sources: the SWIFT IBAN Registry, GLEIF, and national central-bank routing registries (Germany's Bundesbank, Poland's NBP, Austria's OeNB, Czechia's ČNB, Slovakia's NBS, Hungary's MNB). We corrected structure rules and bank/BIC entries across many countries. More on how we verify data on the methodology page.
- New
MCP server now on npm, with build provenance
The MCP server is now published on npm as @ibanchecker/mcp, so any AI client can run it locally over stdio with npx alongside the hosted endpoint. Every release is published from CI with npm build provenance (OpenID Connect), cryptographically linking each version to its exact source commit on GitHub.
- Improved
Daily uptime history on the status page
The status page now shows a 90-day daily uptime history with per-endpoint response times, plus a written explanation of how uptime is measured and how our availability definition aligns with SOC 2 and ISO 27001 criteria.
- Improved
Bank logos on validator results and SWIFT pages
Validated IBAN results and SWIFT/BIC bank pages now display the institution’s official logo where available, drawn from a curated set of vector logos verified against each bank’s own sources.
- New
Published our data verification methodology
A new methodology page documents where every format rule, bank code, and BIC comes from, how the 7,000+ check audit suite tests the dataset on every change, and the corrections we have made, including errors we found in widely copied bank code tables.
- Improved
Bank-specific example IBANs and clearer validator results
Bank pages now show an illustrative IBAN built from that bank’s real domestic code, so the example resolves to the right institution when validated. The validator also recognizes official ISO 13616 sample IBANs and explains why their placeholder bank codes don’t match a real bank, and unmatched lookups now read “Not in our directory” to make clear the gap is in our coverage, not your IBAN.
- Improved
API keys now hashed at rest
Authentication records now store a SHA-256 hash of each API key instead of the key itself. Existing keys keep working unchanged and migrate automatically on first use. Details on the Security & Trust page.
- New
Live API status monitoring
The status page now shows real measurements only. Automated checks run against the production API every 5 minutes from Cloudflare’s network, and the published 30-day uptime is computed from every recorded check.
- Improved
Official bank websites and Wikidata references
Nearly 600 banks in the directory now link to their verified official website, each cross-checked against Wikidata and tested for liveness before publication. Bank profiles also expose these references as structured data.
- Improved
Full bank data audit against official registries
Every national bank code table (France, Italy, Spain, Portugal, Poland, Iceland, the Nordics, and 30+ more) was re-verified against central bank registries such as Banque de France, Banco de Portugal, and NBP EWIB. A permanent regression suite with about 6,000 checks now runs on every data change.
- New
Developer dashboard
Signed-in API users get a full dashboard: multiple named API keys with rotation, monthly usage broken down per endpoint with CSV export, plan overview, and GDPR-compliant data export and account deletion.
- Improved
Machine-readable API surface
Published an OpenAPI 3.1 specification for all five endpoints along with llms.txt, so AI assistants and code generators can integrate the API without guesswork. See API documentation.
- New
Six new IBAN countries: coverage reaches 90
Added Djibouti, Honduras, Senegal, Chad, Togo, and Yemen with full national BBAN parsing, bringing validation coverage to 92 countries. Each has a dedicated format reference.
- Improved
EPC SEPA registry import: 2,300+ institutions
Imported the European Payments Council registers of SEPA scheme participants, growing the SWIFT/BIC directory to more than 2,300 verified institutions across 53 countries, including Andorra, Liechtenstein, Monaco, and San Marino.
- New
WordPress plugin and MCP server
Launched a WooCommerce checkout validation plugin and an open-source MCP server (mcp.ibanchecker.cash) that gives AI assistants direct access to IBAN validation tools. Details on the integrations page.
- New
Developer API with free tier
Opened the REST API: single and bulk validation, free-text IBAN extraction, format lookup, and BIC/SWIFT lookup. Free keys are issued instantly by email with 1,000 requests per month. See API documentation.
- New
Initial launch
ibanchecker.cash goes live with the core IBAN checker, Smart Extract, Bulk Checker, the SWIFT/BIC directory, and country format references. All validation runs in memory at the edge; no IBAN is ever stored.