{"id":"iban-validate","version":"1.0.0","description":"Validate an IBAN's country, registry length, BBAN structure and MOD 97-10 check digits, and parse its bank/branch code.","supported_operations":["validate an iban","check if this bank account number is a valid iban","parse bank code and branch code from an iban","is this iban's check digit correct","verify an international bank account number","בדיקת תקינות מספר חשבון בנק בינלאומי"],"unsupported_operations":["computing an IBAN from a domestic BBAN (use iban-compute-from-bban)","looking up the bank name or address from the bank code","countries not in the pinned IBAN registry (returns unsupported as unknown_country, never a guess)","BIC/SWIFT validation (use bic-validate)"],"semantics":["electronic = iban with every ASCII space removed, then every ASCII a-z upper-cased to A-Z (no other case folding, no locale). print = electronic split into groups of 4 Unicode code points (so a surrogate pair is never split) joined by a single space. Both are always returned.","shape_ok = electronic matches ^[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}$; otherwise valid:false, reason:\"invalid_character\" with country/check_digits/bban/bank_code/branch_code null.","Otherwise country = electronic[0:2], check_digits = electronic[2:4], bban = electronic[4:]. If the pinned IBAN registry (getIbanSpec) has no entry for country, valid:false, reason:\"unknown_country\".","If electronic.length does not equal the registry length for country, valid:false, reason:\"wrong_length\". If bban does not match the registry BBAN notation, valid:false, reason:\"bban_format\".","Otherwise bank_code/branch_code are sliced from bban per the registry (null when the country has no such field). MOD 97-10 check: rearranged = bban + country + check_digits; digits = alnum_to_digits(rearranged) (letters expand to charValue 10-35). If digits mod 97 != 1, valid:false, reason:\"check_digits_mismatch\" (bank_code/branch_code populated). Otherwise valid:true, reason:null.","data_version is always the pinned IBAN registry version, on every path. Pure string parsing and arbitrary-length MOD 97 arithmetic; no locale, clock, or randomness."],"limits":{"max_iban_bytes":60},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["iban"],"properties":{"iban":{"type":"string","minLength":1,"maxLength":60}}},"output_schema":{"type":"object","additionalProperties":false,"required":["valid","reason","country","check_digits","bban","bank_code","branch_code","electronic","print","data_version"],"properties":{"valid":{"type":"boolean"},"reason":{"type":["string","null"],"enum":[null,"invalid_character","unknown_country","wrong_length","bban_format","check_digits_mismatch"]},"country":{"type":["string","null"],"pattern":"^[A-Z]{2}$"},"check_digits":{"type":["string","null"],"pattern":"^[0-9]{2}$"},"bban":{"type":["string","null"],"minLength":1,"maxLength":30},"bank_code":{"type":["string","null"]},"branch_code":{"type":["string","null"]},"electronic":{"type":"string","minLength":1,"maxLength":60},"print":{"type":"string","minLength":1,"maxLength":75},"data_version":{"type":"string"}}},"examples":[{"input":{"iban":"GB29NWBK60161331926819"},"output":{"electronic":"GB29NWBK60161331926819","print":"GB29 NWBK 6016 1331 9268 19","data_version":"swift-iban-registry-103-2026-09.subset-80","valid":true,"reason":null,"country":"GB","check_digits":"29","bban":"NWBK60161331926819","bank_code":"NWBK","branch_code":"601613"}},{"input":{"iban":"DE89370400440532013000"},"output":{"electronic":"DE89370400440532013000","print":"DE89 3704 0044 0532 0130 00","data_version":"swift-iban-registry-103-2026-09.subset-80","valid":true,"reason":null,"country":"DE","check_digits":"89","bban":"370400440532013000","bank_code":"37040044","branch_code":null}},{"input":{"iban":"ZZ29NWBK60161331926819"},"output":{"electronic":"ZZ29NWBK60161331926819","print":"ZZ29 NWBK 6016 1331 9268 19","data_version":"swift-iban-registry-103-2026-09.subset-80","valid":false,"reason":"unknown_country","country":"ZZ","check_digits":"29","bban":"NWBK60161331926819","bank_code":null,"branch_code":null}}],"execute_url":"/v1/tools/iban-validate/versions/1.0.0/execute"}